X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Fmodel%2Fvalidate.py;h=85c4b993c95c7dc9954ffa32f38ce6ff3f0ad2b2;hb=HEAD;hp=c441936ac88bcd6688b6142d87ccec47bac35331;hpb=01d8f262afc567c3d49a23c3cb2cdeaced8a6887;p=csit.git diff --git a/resources/libraries/python/model/validate.py b/resources/libraries/python/model/validate.py index c441936ac8..85c4b993c9 100644 --- a/resources/libraries/python/model/validate.py +++ b/resources/libraries/python/model/validate.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. +# Copyright (c) 2023 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -19,27 +19,7 @@ Structure will probably change when we start validation mode file types. import json import jsonschema - - -def _get_validator(schema_path): - """Contruct validator with format checking enabled. - - Load json schema from disk. - Perform validation against meta-schema before returning. - - :param schema_path: Local filesystem path to .json file storing the schema. - :type schema_path: str - :returns: Instantiated validator class instance. - :rtype: jsonschema.validators.Validator - :raises RuntimeError: If the schema is not valid according its meta-schema. - """ - with open(schema_path, u"rt", encoding="utf-8") as file_in: - schema = json.load(file_in) - validator_class = jsonschema.validators.validator_for(schema) - validator_class.check_schema(schema) - fmt_checker = jsonschema.FormatChecker() - validator = validator_class(schema, format_checker=fmt_checker) - return validator +import yaml def get_validators(): @@ -51,9 +31,17 @@ def get_validators(): :rtype: Mapping[str, jsonschema.validators.Validator] :raises RuntimeError: If schemas are not readable or not valid. """ - relative_path = u"docs/model/current/schema/test_case.info.schema.json" + relative_path = "resources/model_schema/test_case.schema.yaml" # Robot is always started when CWD is CSIT_DIR. - validator = _get_validator(relative_path) + with open(relative_path, "rt", encoding="utf-8") as file_in: + schema = json.loads( + json.dumps(yaml.safe_load(file_in.read()), indent=2) + ) + validator_class = jsonschema.validators.validator_for(schema) + validator_class.check_schema(schema) + fmt_checker = jsonschema.FormatChecker() + validator = validator_class(schema, format_checker=fmt_checker) + return dict(tc_info=validator) @@ -64,10 +52,11 @@ def validate(file_path, validator): :param validator: Validator instance to use for validation. :type file_path: str :type validator: jsonschema.validators.Validator - :raises RuntimeError: If schema validation fails. + :raises ValidationError: If schema validation fails. """ - with open(file_path, u"rt", encoding="utf-8") as file_in: + with open(file_path, "rt", encoding="utf-8") as file_in: instance = json.load(file_in) error = jsonschema.exceptions.best_match(validator.iter_errors(instance)) if error is not None: + print(json.dumps(instance, indent=4)) raise error