@@ -304,7 +304,7 @@ async def load_descriptors_values(self):
304304 for key in v .keys ():
305305 if key .endswith ("Id" ): descriptor = key [0 :- 2 ]
306306 self .descriptor_values .append ([descriptor , v ["namespace" ], v ["codeValue" ], v ["shortDescription" ], v .get ("description" , "" )])
307-
307+
308308 # save
309309 if self .lightbeam .track_state :
310310 self .logger .debug (f"saving descriptor values to { cache_file } ..." )
@@ -331,33 +331,47 @@ async def load_descriptors_values(self):
331331 # }
332332 # (The first element is a required attribute of the assessmentItem; the other two are required elements
333333 # of the required nested assessmentReference.)
334- def get_params_for_endpoint (self , endpoint ):
334+ def get_params_for_endpoint (self , endpoint , type = 'required' ):
335335 if "Descriptor" in endpoint : swagger = self .descriptors_swagger
336336 else : swagger = self .resources_swagger
337- definition = util .camel_case (self .lightbeam .config ["namespace" ]) + "_" + util .singularize_endpoint (endpoint )
338- return self .get_required_params_from_swagger (swagger , definition )
337+ definition = util .get_swagger_ref_for_endpoint (self .lightbeam .config ["namespace" ], swagger , endpoint )
338+ if type == 'required' :
339+ return self .get_required_params_from_swagger (swagger , definition )
340+ else :
341+ # descriptor endpoints all have the same structure and identity fields:
342+ if "Descriptor" in endpoint :
343+ return { 'namespace' :'namespace' , 'codeValue' :'codeValue' , 'shortDescription' :'shortDescription' }
344+ else :
345+ return self .get_identity_params_from_swagger (swagger , definition )
339346
340347 def get_required_params_from_swagger (self , swagger , definition , prefix = "" ):
341348 params = {}
342- use_definitions = False
343- if "definitions" in swagger .keys ():
344- schema = swagger ["definitions" ][definition ]
345- use_definitions = True
346- elif "components" in swagger .keys () and "schemas" in swagger ["components" ].keys ():
347- schema = swagger ["components" ]["schemas" ][definition ]
348- else :
349+ schema = util .resolve_swagger_ref (swagger , definition )
350+ if not schema :
349351 self .logger .critical (f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid." )
350352
351- for requiredProperty in schema ["required" ]:
352- if "$ref" in schema ["properties" ][requiredProperty ].keys ():
353- sub_definition = schema ["properties" ][requiredProperty ]["$ref" ]
354- if use_definitions :
355- sub_definition = sub_definition .replace ("#/definitions/" , "" )
356- else :
357- sub_definition = sub_definition .replace ("#/components/schemas/" , "" )
358- sub_params = self .get_required_params_from_swagger (swagger , sub_definition , prefix = requiredProperty + "." )
353+ for prop in schema ["required" ]:
354+ if "$ref" in schema ["properties" ][prop ].keys ():
355+ sub_definition = schema ["properties" ][prop ]["$ref" ]
356+ sub_params = self .get_required_params_from_swagger (swagger , sub_definition , prefix = prop + "." )
357+ for k ,v in sub_params .items ():
358+ params [k ] = v
359+ elif schema ["properties" ][prop ]["type" ]!= "array" :
360+ params [prop ] = prefix + prop
361+ return params
362+
363+ def get_identity_params_from_swagger (self , swagger , definition , prefix = "" ):
364+ params = {}
365+ schema = util .resolve_swagger_ref (swagger , definition )
366+ if not schema :
367+ self .logger .critical (f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid." )
368+
369+ for prop in schema ["properties" ]:
370+ if prop .endswith ("Reference" ) and "required" in schema .keys () and prop in schema ['required' ] and "$ref" in schema ["properties" ][prop ].keys ():
371+ sub_definition = schema ["properties" ][prop ]["$ref" ]
372+ sub_params = self .get_identity_params_from_swagger (swagger , sub_definition , prefix = prop + "." )
359373 for k ,v in sub_params .items ():
360374 params [k ] = v
361- elif schema ["properties" ][requiredProperty ][ " type" ]!= "array" :
362- params [requiredProperty ] = prefix + requiredProperty
375+ elif "type" in schema ["properties" ][prop ]. keys () and schema [ "properties" ][ prop ][ " type" ]!= "array" and "x-Ed-Fi-isIdentity" in schema [ "properties" ][ prop ]. keys () :
376+ params [prop ] = prefix + prop
363377 return params
0 commit comments