File tree Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Expand file tree Collapse file tree 2 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -59,9 +59,11 @@ def merge_resources(target: Resource, updates: BaseModel):
59
59
if isinstance (getattr (updates , set_attribute ), Extension ):
60
60
# This is a model extension, handle it as its own resource
61
61
# and don't simply overwrite it
62
- merge_resources (
63
- getattr (target , set_attribute ), getattr (updates , set_attribute )
64
- )
62
+ target_extension = getattr (target , set_attribute )
63
+ if target_extension is None :
64
+ setattr (target , set_attribute , getattr (updates , set_attribute ))
65
+ else :
66
+ merge_resources (target_extension , getattr (updates , set_attribute ))
65
67
continue
66
68
new_value = getattr (updates , set_attribute )
67
69
if mutability == Mutability .immutable and getattr (
Original file line number Diff line number Diff line change @@ -368,3 +368,20 @@ def test_get_or_create_mutability(self):
368
368
u = User ()
369
369
with pytest .raises (SCIMException , match = "immutable" ):
370
370
get_or_create (u , "groups" , True )
371
+
372
+ def test_merge_resources_none_extension (self ):
373
+ """Test adding an extension parameter with merge_resources."""
374
+ target = User [EnterpriseUser ](user_name = "test" )
375
+ assert target [EnterpriseUser ] is None
376
+
377
+ payload = {
378
+ "userName" : "test" ,
379
+ "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User" : {
380
+ "employeeNumber" : "12345"
381
+ },
382
+ }
383
+ update = User [EnterpriseUser ].model_validate (payload )
384
+
385
+ merge_resources (target , update )
386
+
387
+ assert target [EnterpriseUser ].employee_number == "12345"
You can’t perform that action at this time.
0 commit comments