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'),

Release files for django-scim 0.8.167

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-scim 0.8.167
File Size Uploaded
django_scim-0.8.167.tar.gz 9.9 kB Details

Release files / django_scim-0.8.167.tar.gz

Download URL django_scim-0.8.167.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5dcd08d2ab850f52c8a6680efe344ab8c5ca9542e92c009e53bfc136ced5a5d9
BLAKE2b-256 checksum
How to use checksums
fa41704d67cd77b685fe4a2105db21fb66b59d67c4786e806707672889d232f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.8.167 This release

1 release file

0.7.100

1 release file

0.6.97

1 release file

0.6.95

1 release file

0.6.93

1 release file

0.6.84

1 release file

0.5.81

1 release file

0.4.8

1 release file

0.4.7

1 release file

0.4.6

1 release file

0.4.4

1 release file

0.4.3

1 release file

0.4.1

1 release file

0.4

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page