diff --git a/CHANGELOG.md b/CHANGELOG.md index d92c8a408c9b8a54a09a2ce19de4807e0d4bb294..fe7f449ab1d2017e1ae802c0774e77a7d8bd9de7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### - TableImporter now accepts a `existing_columns` argument which demands that certain columns exist -- The `JsonSchemaParser` class now supports `patternProperties` and json-schema references +- The `JsonSchemaParser` class supports `patternProperties` +- The `JsonSchemaParser` calss supports json-schema references (`$ref`) ### Changed ### diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index 4df1c0a290fea499f936bbfad70b8d67455b2f2b..c15f3d1bc1d5b2c30891200c3bd0ee5cbbebe152 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -192,7 +192,7 @@ def parse_model_from_json_schema( """ # @author Florian Spreckelsen # @date 2022-02-17 - # @review Daniel Hornung 2022-02-18 + # @review Timm Fitschen 2023-05-25 parser = JsonSchemaParser(types_for_missing_array_items, ignore_unspecified_array_items) return parser.parse_model_from_json_schema(filename, top_level_recordtype) @@ -639,7 +639,7 @@ class JsonSchemaParser(Parser): """ # @author Florian Spreckelsen # @date 2022-02-17 - # @review Timm Fitschen 2022-02-30 + # @review Timm Fitschen 2023-05-25 def __init__(self, types_for_missing_array_items={}, ignore_unspecified_array_items=False): super().__init__() @@ -665,7 +665,7 @@ class JsonSchemaParser(Parser): """ # @author Florian Spreckelsen # @date 2022-02-17 - # @review Timm Fitschen 2022-02-30 + # @review Timm Fitschen 2023-05-25 with open(filename, 'r') as schema_file: model_dict = jsonref.load(schema_file) @@ -711,7 +711,7 @@ class JsonSchemaParser(Parser): # Check if this is a valid Json Schema name = self._stringify(elt["title"], context=elt) self._treat_element(elt, name) - elif "properties" in elt or "patternProperties": + elif "properties" in elt or "patternProperties" in elt: # No top-level type but there are entities if "properties" in elt: for key, prop in elt["properties"].items(): @@ -732,7 +732,7 @@ class JsonSchemaParser(Parser): return DataModel(self.model.values()) def _get_name_from_property(self, key: str, prop: dict): - + # @review Timm Fitschen 2023-05-25 if "title" in prop: name = self._stringify(prop["title"]) else: @@ -741,7 +741,7 @@ class JsonSchemaParser(Parser): return name def _get_atomic_datatype(self, elt): - # @review Timm Fitschen 2022-02-30 + # @review Timm Fitschen 2023-05-25 if elt["type"] == "string": if "format" in elt and elt["format"] in ["date", "date-time"]: return db.DATETIME @@ -859,7 +859,7 @@ class JsonSchemaParser(Parser): return rt def _treat_list(self, elt: dict, name: str): - # @review Timm Fitschen 2022-02-30 + # @review Timm Fitschen 2023-05-25 if "items" not in elt and name not in self.types_for_missing_array_items: if self.ignore_unspecified_array_items: @@ -890,6 +890,7 @@ class JsonSchemaParser(Parser): return db.Property(name=name, datatype=datatype), False def _get_pattern_prop(self): + # @review Timm Fitschen 2023-05-25 if "__pattern_property_pattern_property" in self.model: return self.model["__pattern_property_pattern_property"] pp = db.Property(name="__matched_pattern", datatype=db.TEXT) @@ -910,6 +911,7 @@ class JsonSchemaParser(Parser): array. """ + # @review Timm Fitschen 2023-05-25 num_patterns = len(pattern_elements) pattern_prop = self._get_pattern_prop() returns = [] diff --git a/src/doc/json_schema_interface.rst b/src/doc/json_schema_interface.rst index 09fe10fabe99714f96408dec08224bc005a6f2b7..0e8aebd3a4204f29608212f7ed0c115fd1d4a134 100644 --- a/src/doc/json_schema_interface.rst +++ b/src/doc/json_schema_interface.rst @@ -16,7 +16,7 @@ RecordTypes are created from their parent element's name by appending the string ``"Entry"`` and possibly a number if there are more than one pattern properties for one parent. -All the RecordTypes created for pattern properties have at least an boligatory +All the RecordTypes created for pattern properties have at least an obligatory ``__matched_pattern`` property which will -- as the name suggests -- store the matched pattern of an actual data entry.