11from typing import TYPE_CHECKING
22
33from mitol .scim .adapters import UserAdapter
4+ from mitol .scim .constants import SchemaURI
45
56from openedx .models import OpenEdxUser
67from users .models import LegalAddress , UserProfile
@@ -16,7 +17,9 @@ class LearnUserAdapter(UserAdapter):
1617 django_scim library.
1718 """
1819
19- ATTR_MAP = UserAdapter .ATTR_MAP | {
20+ ATTR_MAP = {
21+ ("active" , None , None ): "is_active" ,
22+ ("userName" , None , None ): "username" ,
2023 ("fullName" , None , None ): "name" ,
2124 }
2225
@@ -49,6 +52,23 @@ def display_name(self):
4952 """
5053 return self .obj .name
5154
55+ def to_dict (self ):
56+ """
57+ Return a ``dict`` conforming to the SCIM User Schema,
58+ ready for conversion to a JSON object.
59+ """
60+ return {
61+ "id" : self .id ,
62+ "externalId" : self .obj .scim_external_id ,
63+ "schemas" : [SchemaURI .USER ],
64+ "userName" : self .obj .username ,
65+ "displayName" : self .display_name ,
66+ "emails" : self .emails ,
67+ "active" : self .obj .is_active ,
68+ "groups" : [],
69+ "meta" : self .meta ,
70+ }
71+
5272 def from_dict (self , d ):
5373 """
5474 Consume a ``dict`` conforming to the SCIM User Schema, updating the
@@ -61,9 +81,14 @@ def from_dict(self, d):
6181 scim_user.from_dict(d)
6282 scim_user.save()
6383 """
64- super ().from_dict (d )
65-
66- self .obj .name = d .get ("fullName" , self .obj .name ) # name's default is ""
84+ self .parse_emails (d .get ("emails" ))
85+
86+ self .obj .is_active = d .get ("active" , True )
87+ self .obj .username = d .get ("userName" )
88+ self .obj .scim_username = d .get ("userName" )
89+ self .obj .scim_external_id = d .get ("externalId" )
90+ self .obj .global_id = self .obj .scim_external_id or ""
91+ self .obj .name = d .get ("fullName" , self .obj .name )
6792
6893 def _save_related (self ):
6994 self .user_profile .user = self .obj
0 commit comments