@@ -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,56 @@ 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+ # definition = util.camel_case(self.lightbeam.config["namespace"]) + "_" + util.singularize_endpoint(endpoint)
339+ if type == 'required' :
340+ return self .get_required_params_from_swagger (swagger , definition )
341+ else :
342+ # descriptor endpoints all have the same structure and identity fields:
343+ if "Descriptor" in endpoint :
344+ return { 'namespace' :'namespace' , 'codeValue' :'codeValue' , 'shortDescription' :'shortDescription' }
345+ else :
346+ return self .get_identity_params_from_swagger (swagger , definition )
339347
340348 def get_required_params_from_swagger (self , swagger , definition , prefix = "" ):
341349 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 :
350+ schema = util .resolve_swagger_ref (swagger , definition )
351+ if not schema :
349352 self .logger .critical (f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid." )
350353
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 + "." )
354+ for prop in schema ["required" ]:
355+ print (f"{ definition } : { prop } : { schema ['properties' ][prop ].keys ()} " )
356+ if "$ref" in schema ["properties" ][prop ].keys ():
357+ sub_definition = schema ["properties" ][prop ]["$ref" ]
358+ sub_params = self .get_required_params_from_swagger (swagger , sub_definition , prefix = prop + "." )
359+ print (sub_definition , sub_params )
360+ for k ,v in sub_params .items ():
361+ params [k ] = v
362+ elif schema ["properties" ][prop ]["type" ]!= "array" :
363+ params [prop ] = prefix + prop
364+ if len (params .keys ())> 0 : print (params )
365+ return params
366+
367+ def get_identity_params_from_swagger (self , swagger , definition , prefix = "" ):
368+ params = {}
369+ schema = util .resolve_swagger_ref (swagger , definition )
370+ if not schema :
371+ self .logger .critical (f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid." )
372+
373+ for prop in schema ["properties" ]:
374+ if prop .endswith ("Reference" ) and "requied" in schema .keys () and prop in schema ['required' ]:
375+ sub_definition = schema ["properties" ][prop ]["$ref" ]
376+ sub_schema = util .resolve_swagger_ref (swagger , sub_definition )
377+ for sub_prop in sub_schema ["required" ]:
378+ params [f"{ prop } .{ sub_prop } " ] = sub_prop
379+ elif "$ref" in schema ["properties" ][prop ].keys ():
380+ sub_definition = schema ["properties" ][prop ]["$ref" ]
381+ sub_params = self .get_identity_params_from_swagger (swagger , sub_definition , prefix = prop + "." )
359382 for k ,v in sub_params .items ():
360383 params [k ] = v
361- elif schema ["properties" ][requiredProperty ]["type" ]!= "array" :
362- params [requiredProperty ] = prefix + requiredProperty
384+ elif schema ["properties" ][prop ]["type" ]!= "array" and "x-Ed-Fi-isIdentity" in schema [ "properties" ][ prop ]. keys () :
385+ params [prop ] = prefix + prop
363386 return params
0 commit comments