diff --git a/src/caoscrawler/validator.py b/src/caoscrawler/validator.py new file mode 100644 index 0000000000000000000000000000000000000000..7e7a2eb32be09498a9a0dfb528f5eaa8b5744d90 --- /dev/null +++ b/src/caoscrawler/validator.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# encoding: utf-8 +# +# This file is a part of the LinkAhead Project. +# +# Copyright (C) 2024 Indiscale GmbH <info@indiscale.com> +# Copyright (C) 2024 Alexander Schlemmer +# +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +# ** end header +# + +""" +This module contains functions to validate the output of a scanner run with a +json schema. +""" + + +import json + +import jsonschema +import linkahead as db +# from caosadvancedtools.models.parser import parse_model_from_string +from caosadvancedtools.json_schema_exporter import recordtype_to_json_schema +from caosadvancedtools.models.parser import parse_model_from_yaml +from linkahead.high_level_api import convert_to_python_object + +from caoscrawler import scanner + + +def load_json_schema_from_datamodel_yaml(filename: str) -> list: + """ + Load a data model yaml file (using caosadvancedtools) and convert + all record types into a json schema using the json_schema_exporter module. + + Arguments + --------- + filename: str + The filename of the yaml file to load. + + Returns + ------- + A list of json schema objects. + """ + + model = parse_model_from_yaml(filename) + + # TODO: fix needed (https://gitlab.indiscale.com/caosdb/customers/f-fit/management/-/issues/58) + + rt_schemas = [] + for el in model: + if isinstance(el, db.RecordType): + rt_schemas.append(recordtype_to_json_schema(el)) + + return rt_schemas