Skip to main content

This is a partial provider-side implementation of the SCIM 2.0 [1] specification for use in Django. It covers:

  • Serialization of Django User objects to SCIM documents

  • REST view for <prefix>/Users/uid

  • REST view for <prefix>/Users/.search

  • SCIM filter query parser covering all operators and most fields

  • Limited pluggability support

Note that currently the only supported database is Postgres.

Installation

$ pip install django_scim

Then add the django_scim app to INSTALLED_APPS in Django’s settings file and the necessary url mappings:

urlpatterns = patterns('',
    url(r'^/scim/v2/Users/.search/?$',
        SearchView.as_view(), name='scim-search'),
    url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(), name='scim-user'),
)

Extensibility

By default, django_scim uses the email field on the User class. However, if your application maintains multiple identities using custom separate database tables, you can override django_scim.models.SCIMUser and pull that in:

from django_scim.models import SCIMUser as _SCIMUser

from acme.apps.bb.models import Identity


class SCIMUser(_SCIMUser):
    def __init__(self, user):
        super(SCIMUser, self).__init__(user)
        self.identities = (Identity.objects
                                   .filter(profile__user_id=self.user.id))

    @property
    def emails(self):
        return {i.email: i.primary for i in self.identities}

Here we keep multiple email addresses in a table that is linked to UserProfile. Next, tell the views to use this class instead of the default:

url(r'^/scim/v2/Users/([^/]+)$', UserView.as_view(usercls=SCIMUser),
    name='scim-user'),

When your email address live in different tables, you’ll also need to extend the filter query parser to make sure they can be queried on:

from django_scim.filter import SCIMFilterTransformer


class AcmeSCIMTransformer(SCIMFilterTransformer):
    email = lambda *args: 'i.email'

    def join(self):
        return """
            JOIN bb_userprofile p ON p.user_id = u.id
            LEFT OUTER JOIN bb_identity i ON i.profile_id = p.id
            """

And pass it on to the view:

url(r'^/scim/v2/Users/([^/]+)$',
    UserView.as_view(usercls=SCIMUser, parser=AcmeSCIMTransformer),
    name='scim-user'),

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_scim-0.8.167.tar.gz (9.9 kB view details)

Uploaded Source

File details

Details for the file django_scim-0.8.167.tar.gz.

File metadata

  • Download URL: django_scim-0.8.167.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for django_scim-0.8.167.tar.gz
Algorithm Hash digest
SHA256 5dcd08d2ab850f52c8a6680efe344ab8c5ca9542e92c009e53bfc136ced5a5d9
MD5 700972606a09e3d8cd5945c6ec3bd7c3
BLAKE2b-256 fa41704d67cd77b685fe4a2105db21fb66b59d67c4786e806707672889d232f8

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.8.167 This release

1 file

0.7.100

1 file

0.6.97

1 file

0.6.95

1 file

0.6.93

1 file

0.6.84

1 file

0.5.81

1 file

0.4.8

1 file

0.4.7

1 file

0.4.6

1 file

0.4.4

1 file

0.4.3

1 file

0.4.1

1 file

0.4

1 file

0.3

1 file

0.2

1 file

0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page