@@ -160,7 +160,7 @@ def generate_random_value(
160160 if is_multiple :
161161 value = [value ]
162162
163- return value
163+ return fix_reference_values_in_value ( value )
164164
165165
166166def fill_with_random_values (
@@ -202,27 +202,33 @@ def fill_with_random_values(
202202 set_value_by_urn (obj , urn , value )
203203
204204 fix_primary_attributes (obj )
205- fix_reference_values (obj )
206205
207206 return obj
208207
209208
210- def fix_reference_values ( obj : Resource [ Any ] ) -> None :
211- """Fix reference values to extract IDs from reference URLs.
209+ def fix_reference_values_in_value ( value : Any ) -> Any :
210+ """Fix reference values in any value to extract IDs from reference URLs.
212211
213212 For SCIM reference fields, correctly sets the value field to match
214- the ID extracted from the reference URL.
213+ the ID extracted from the reference URL. Works with both single values
214+ and lists containing reference objects.
215215 """
216- for field_name , _field_info in type (obj ).model_fields .items ():
217- attr_value = getattr (obj , field_name , None )
218- if not attr_value or not isinstance (attr_value , list ):
219- continue
216+ if isinstance (value , list ):
217+ for item in value :
218+ if (
219+ hasattr (item , "ref" )
220+ and hasattr (item , "value" )
221+ and getattr (item , "ref" , None )
222+ ):
223+ item .value = item .ref .rsplit ("/" , 1 )[- 1 ]
224+ elif (
225+ hasattr (value , "ref" )
226+ and hasattr (value , "value" )
227+ and getattr (value , "ref" , None )
228+ ):
229+ value .value = value .ref .rsplit ("/" , 1 )[- 1 ]
220230
221- for item in attr_value :
222- if not (ref := getattr (item , "ref" , None )) or not hasattr (item , "value" ):
223- continue
224-
225- item .value = ref .rsplit ("/" , 1 )[- 1 ]
231+ return value
226232
227233
228234def fix_primary_attributes (obj : Resource [Any ]) -> None :
0 commit comments