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):
5959 if isinstance (getattr (updates , set_attribute ), Extension ):
6060 # This is a model extension, handle it as its own resource
6161 # 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 ))
6567 continue
6668 new_value = getattr (updates , set_attribute )
6769 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):
368368 u = User ()
369369 with pytest .raises (SCIMException , match = "immutable" ):
370370 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