@@ -127,7 +127,7 @@ def sync_kc_user(self, kc_user: ch_models.User, is_superuser=False, delete=False
127127
128128 # Update user attributes
129129 user = self ._map_kc_user (user , kc_user , is_superuser , delete )
130- self .sync_kc_user_groups (kc_user )
130+ self .sync_kc_user_groups (kc_user , user = user )
131131 user .save ()
132132
133133 # FINAL SAFETY CHECK: Verify Member exists before returning
@@ -140,9 +140,10 @@ def sync_kc_user(self, kc_user: ch_models.User, is_superuser=False, delete=False
140140
141141 return user
142142
143- def sync_kc_user_groups (self , kc_user : ch_models .User ):
143+ def sync_kc_user_groups (self , kc_user : ch_models .User , user : User = None ):
144144 # Sync the user usergroups (not organizations) using kc_id for reliable lookups
145- user = get_user_by_kc_id (kc_user .id )
145+ if user is None :
146+ user = get_user_by_kc_id (kc_user .id )
146147
147148 if user is None :
148149 raise ValueError (f"Django user not found for Keycloak user { kc_user .id } " )
@@ -156,7 +157,7 @@ def sync_kc_user_groups(self, kc_user: ch_models.User):
156157 user .save ()
157158
158159 # Sync organization memberships separately
159- self .sync_kc_user_organizations (kc_user )
160+ self .sync_kc_user_organizations (kc_user , user = user )
160161
161162 # Ensure the member relationship exists and is correct
162163 try :
@@ -201,14 +202,16 @@ def sync_kc_organization(self, kc_org: ch_models.Organization) -> Organization:
201202 )
202203 return org
203204
204- def sync_kc_user_organizations (self , kc_user : ch_models .User ):
205+ def sync_kc_user_organizations (self , kc_user : ch_models .User , user : User = None ):
205206 """
206207 Sync the user's organization memberships from Keycloak to Django.
207208 Creates Organization records if they don't exist and manages OrganizationMember relationships.
208209
209210 :param kc_user: Keycloak user object with organizations attribute
211+ :param user: Django User instance (optional, looked up by kc_id if not provided)
210212 """
211- user = get_user_by_kc_id (kc_user .id )
213+ if user is None :
214+ user = get_user_by_kc_id (kc_user .id )
212215
213216 if user is None :
214217 raise ValueError (f"Django user not found for Keycloak user { kc_user .id } " )
0 commit comments