From 8be1d1e7316ddfd16c2a59c825204458ed8eab44 Mon Sep 17 00:00:00 2001 From: florian <f.spreckelsen@inidscale.com> Date: Mon, 24 Apr 2023 11:48:49 +0200 Subject: [PATCH] WIP: Add jsonref for reference resolving --- setup.py | 3 ++- src/caosadvancedtools/models/parser.py | 5 +++-- .../datamodel_no_toplevel_entity.schema.json | 3 +++ unittests/test_json_schema_model_parser.py | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 6201149e..eed060aa 100755 --- a/setup.py +++ b/setup.py @@ -163,7 +163,8 @@ def setup_package(): "xlrd>=2.0", ], extras_require={"h5-crawler": ["h5py>=3.3.0", ], - "gitignore-parser ": ["gitignore-parser >=0.1.0", ], + "gitignore-parser": ["gitignore-parser >=0.1.0", ], + "jsonref": ["jsonref", ], }, packages=find_packages('src'), package_dir={'': 'src'}, diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index 6a33d5c0..abf47d03 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -35,8 +35,9 @@ not defined, simply the name can be supplied with no value. Parents can be provided under the 'inherit_from_xxxx' keywords. The value needs to be a list with the names. Here, NO NEW entities can be defined. """ -import json import argparse +import json +import jsonref import re import sys import yaml @@ -648,7 +649,7 @@ class JsonSchemaParser(Parser): # @date 2022-02-17 # @review Timm Fitschen 2022-02-30 with open(filename, 'r') as schema_file: - model_dict = json.load(schema_file) + model_dict = jsonref.load(schema_file) return self._create_model_from_dict(model_dict, top_level_recordtype=top_level_recordtype) diff --git a/unittests/json-schema-models/datamodel_no_toplevel_entity.schema.json b/unittests/json-schema-models/datamodel_no_toplevel_entity.schema.json index 3e4f1770..104d22c7 100644 --- a/unittests/json-schema-models/datamodel_no_toplevel_entity.schema.json +++ b/unittests/json-schema-models/datamodel_no_toplevel_entity.schema.json @@ -32,6 +32,9 @@ "number_prop": { "type": "number", "description": "Some float property" + }, + "user_id": { + "$ref": "#/definitions/uuid" } }, "required": ["title", "number_prop"] diff --git a/unittests/test_json_schema_model_parser.py b/unittests/test_json_schema_model_parser.py index 81c76cb9..48395598 100644 --- a/unittests/test_json_schema_model_parser.py +++ b/unittests/test_json_schema_model_parser.py @@ -367,11 +367,12 @@ def test_no_toplevel_entity(): assert rt1.name == "Dataset1" assert rt1.description == "Some description" - assert len(rt1.get_properties()) == 3 + assert len(rt1.get_properties()) == 4 assert rt1.get_property("title") is not None assert rt1.get_property("campaign") is not None assert rt1.get_property("number_prop") is not None + assert rt1.get_property("user_id") is not None title_prop = rt1.get_property("title") assert title_prop.datatype == db.TEXT -- GitLab