Skip to content

Commit 10b7f48

Browse files
authored
Merge pull request #25 from edanalytics/feature/fix_swagger_definitions_for_edfi_7_1
`definitions` in swagger were renamed to `components.schemas` in Ed-Fi 7.1
2 parents bba6b8f + cbb15dc commit 10b7f48

2 files changed

Lines changed: 24 additions & 6 deletions

File tree

lightbeam/api.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,12 +301,25 @@ def get_params_for_endpoint(self, endpoint):
301301

302302
def get_required_params_from_swagger(self, swagger, definition, prefix=""):
303303
params = {}
304-
for requiredProperty in swagger["definitions"][definition]["required"]:
305-
if "$ref" in swagger["definitions"][definition]["properties"][requiredProperty].keys():
306-
sub_definition = swagger["definitions"][definition]["properties"][requiredProperty]["$ref"].replace("#/definitions/", "")
304+
use_definitions = False
305+
if "definitions" in swagger.keys():
306+
schema = swagger["definitions"][definition]
307+
use_definitions = True
308+
elif "components" in swagger.keys() and "schemas" in swagger["components"].keys():
309+
schema = swagger["components"]["schemas"][definition]
310+
else:
311+
self.logger.critical(f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid.")
312+
313+
for requiredProperty in schema["required"]:
314+
if "$ref" in schema["properties"][requiredProperty].keys():
315+
sub_definition = schema["properties"][requiredProperty]["$ref"]
316+
if use_definitions:
317+
sub_definition = sub_definition.replace("#/definitions/", "")
318+
else:
319+
sub_definition = sub_definition.replace("#/components/schemas/", "")
307320
sub_params = self.get_required_params_from_swagger(swagger, sub_definition, prefix=requiredProperty+".")
308321
for k,v in sub_params.items():
309322
params[k] = v
310-
elif swagger["definitions"][definition]["properties"][requiredProperty]["type"]!="array":
323+
elif schema["properties"][requiredProperty]["type"]!="array":
311324
params[requiredProperty] = prefix + requiredProperty
312325
return params

lightbeam/validate.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,13 @@ def validate(self):
3131
# Validates a single endpoint based on the Swagger docs
3232
def validate_endpoint(self, swagger, endpoint, local_descriptors=[]):
3333
definition = util.camel_case(self.lightbeam.config["namespace"]) + "_" + util.singularize_endpoint(endpoint)
34-
resource_schema = swagger["definitions"][definition]
35-
34+
if "definitions" in swagger.keys():
35+
resource_schema = swagger["definitions"][definition]
36+
elif "components" in swagger.keys() and "schemas" in swagger["components"].keys():
37+
resource_schema = swagger["components"]["schemas"][definition]
38+
else:
39+
self.logger.critical(f"Swagger contains neither `definitions` nor `components.schemas` - check that the Swagger is valid.")
40+
3641
resolver = RefResolver("test", swagger, swagger)
3742
validator = Draft4Validator(resource_schema, resolver=resolver)
3843
params_structure = self.lightbeam.api.get_params_for_endpoint(endpoint)

0 commit comments

Comments
 (0)