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