Skip to content
Snippets Groups Projects

F json schema datamodel

Merged Florian Spreckelsen requested to merge f-json-schema-datamodel into dev
3 files
+ 18
10
Compare changes
  • Side-by-side
  • Inline

Files

@@ -99,6 +99,7 @@ class YamlDefinitionError(RuntimeError):
class JsonSchemaDefinitionError(RuntimeError):
# @author Florian Spreckelsen
# @date 2022-02-17
# @review Daniel Hornung 2022-02-18
def __init__(self, msg):
super().__init__(msg)
@@ -121,6 +122,7 @@ def parse_model_from_json_schema(filename: str):
"""Return a datamodel parsed from a json schema definition."""
# @author Florian Spreckelsen
# @date 2022-02-17
# @review Daniel Hornung 2022-02-18
parser = JsonSchemaParser()
return parser.parse_model_from_json_schema(filename)
@@ -466,6 +468,7 @@ class JsonSchemaParser(Parser):
"""Extends the yaml parser to read in datamodels defined in a json schema."""
# @author Florian Spreckelsen
# @date 2022-02-17
# @review Daniel Hornung 2022-02-18
def parse_model_from_json_schema(self, filename: str):
"""Return a datamodel created from the definition in the json schema in
@@ -506,12 +509,10 @@ class JsonSchemaParser(Parser):
model_dict = [model_dict]
for ii, elt in enumerate(model_dict):
if not "title" in elt:
raise JsonSchemaDefinitionError(
"Object {} is lacking the `title` key word".format(ii+1))
if not "type" in elt:
raise JsonSchemaDefinitionError(
"Object {} is lacking the `type` key word".format(ii+1))
if "title" not in elt:
raise JsonSchemaDefinitionError(f"Object {ii+1} is lacking the `title` key word")
if "type" not in elt:
raise JsonSchemaDefinitionError(f"Object {ii+1} is lacking the `type` key word")
name = self._stringify(elt["title"], context=elt)
self._treat_element(elt, name)
@@ -535,8 +536,7 @@ class JsonSchemaParser(Parser):
elif elt["type"] == "object":
ent = self._treat_record_type(elt, name)
else:
raise NotImplementedError(
"Cannot parse items of type '{}' (yet).".format(elt["type"]))
raise NotImplementedError(f"Cannot parse items of type '{elt['type']}' (yet).")
if "description" in elt:
ent.description = elt["description"]
@@ -552,7 +552,7 @@ class JsonSchemaParser(Parser):
if "properties" in elt:
for key, prop in elt["properties"].items():
if "title" in prop:
name = self._stringify(title)
name = self._stringify(prop["title"])
else:
name = self._stringify(key)
prop_ent = self._treat_element(prop, name)
Loading