diff options
author | pmikus <peter.mikus@protonmail.ch> | 2023-01-16 14:35:06 +0000 |
---|---|---|
committer | Peter Mikus <peter.mikus@protonmail.ch> | 2023-01-17 09:08:29 +0000 |
commit | 8609df3a0e9f5510a5485d100ed03a40b051c199 (patch) | |
tree | 563121587b00eacaeb7464228f0ffd01b7c14ea0 /resources | |
parent | 5a5f05618e7c1fd9e7983a90f0ba75b492e548d9 (diff) |
feat(model): Simplify logic
Signed-off-by: pmikus <peter.mikus@protonmail.ch>
Change-Id: I461899d72e92e5c5db9f64261206ec0e6704e0c8
Diffstat (limited to 'resources')
-rw-r--r-- | resources/libraries/bash/entry/tox/model_version.sh | 65 | ||||
-rw-r--r-- | resources/libraries/python/model/ExportJson.py | 2 | ||||
-rw-r--r-- | resources/libraries/python/model/MemDump.py | 2 | ||||
-rw-r--r-- | resources/libraries/python/model/util.py | 2 | ||||
-rw-r--r-- | resources/libraries/python/model/validate.py | 38 |
5 files changed, 16 insertions, 93 deletions
diff --git a/resources/libraries/bash/entry/tox/model_version.sh b/resources/libraries/bash/entry/tox/model_version.sh deleted file mode 100644 index 2bcc628bfb..0000000000 --- a/resources/libraries/bash/entry/tox/model_version.sh +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (c) 2022 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: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set -exuo pipefail - -# This file should be executed from tox, as the assumed working directory -# is different from where this file is located. -# This file does not have executable flag nor shebang, -# to dissuade non-tox callers. - -# This script runs a two grep commands as "if" conditions, -# using log files to store the data (generated by git commands) to grep, -# failing when model implementation edits do not come with model version edit. -# The contents of the log files may be useful when fail cause is not obvious. - -# "set -eu" handles failures from the following two lines. -BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))" -BASH_FUNCTION_DIR="$(readlink -e "${BASH_CHECKS_DIR}/../../function")" -source "${BASH_FUNCTION_DIR}/common.sh" || { - echo "Source failed." >&2 - exit 1 -} - -impl_log="edited_files.log" -git diff --name-only HEAD~ > "${impl_log}" -if ! grep -q '^docs/model/current/schema/test_case*' "${impl_log}"; then - # Failing grep means no model edits. - warn "No model implementation edits detected." - warn - warn "CSIT model version checker: PASS" - exit 0 -fi -const_log="constants_edits.log" -git diff -U0 HEAD~ -- "resources/libraries/python/Constants.py" > "${const_log}" -if ! grep -q '^\+ MODEL_VERSION = ' "${const_log}"; then - warn "Model implementation edits without version edit detected!" - warn "See ${impl_log} and ${const_log} for what was detected." - warn - warn "CSIT model version checker: FAIL" - exit 1 -fi -doc_log="docs_edits.log" -git diff -U0 HEAD~ -- "docs/model/current/top.rst" > "${doc_log}" -if ! grep -q '^\+This document is valid for CSIT model' "${doc_log}"; then - warn "Model implementation edits without documentation update detected!" - warn "See ${impl_log}, ${const_log} and ${doc_log} for what was detected." - warn - warn "CSIT model version checker: FAIL" - exit 1 -fi -# TODO: Check constants and docs are specifying the same version. -warn "Model version and doc are edited, model implementation edits are allowed." -warn -warn "CSIT model version checker: PASS" -exit 0 diff --git a/resources/libraries/python/model/ExportJson.py b/resources/libraries/python/model/ExportJson.py index b0e0158295..bbb989c3cc 100644 --- a/resources/libraries/python/model/ExportJson.py +++ b/resources/libraries/python/model/ExportJson.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022 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: diff --git a/resources/libraries/python/model/MemDump.py b/resources/libraries/python/model/MemDump.py index bf8835244b..b391569286 100644 --- a/resources/libraries/python/model/MemDump.py +++ b/resources/libraries/python/model/MemDump.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022 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: diff --git a/resources/libraries/python/model/util.py b/resources/libraries/python/model/util.py index ff5042fa6c..db2ef14bbb 100644 --- a/resources/libraries/python/model/util.py +++ b/resources/libraries/python/model/util.py @@ -1,4 +1,4 @@ -# Copyright (c) 2022 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: diff --git a/resources/libraries/python/model/validate.py b/resources/libraries/python/model/validate.py index c441936ac8..47948addeb 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 = "docs/model/current/schema/test_case.info.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) @@ -66,7 +54,7 @@ def validate(file_path, validator): :type validator: jsonschema.validators.Validator :raises RuntimeError: 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: |