Skip to content
Snippets Groups Projects
Commit 051ce4b6 authored by Florian Spreckelsen's avatar Florian Spreckelsen
Browse files

ENH: Add treatment for null types

parent 89395c3e
No related branches found
No related tags found
2 merge requests!73MAINT: change wording of TableImporter argument and allow converters and...,!72Extend json-schema model parser
This commit is part of merge request !72. Comments created here will be created in the context of that merge request.
...@@ -77,7 +77,8 @@ JSON_SCHEMA_ATOMIC_TYPES = [ ...@@ -77,7 +77,8 @@ JSON_SCHEMA_ATOMIC_TYPES = [
"string", "string",
"boolean", "boolean",
"integer", "integer",
"number" "number",
"null"
] ]
...@@ -726,6 +727,10 @@ class JsonSchemaParser(Parser): ...@@ -726,6 +727,10 @@ class JsonSchemaParser(Parser):
return db.DOUBLE return db.DOUBLE
elif elt["type"] == "boolean": elif elt["type"] == "boolean":
return db.BOOLEAN return db.BOOLEAN
elif elt["type"] == "null":
# This could be any datatype since a valid json will never have a
# value in a null property. We use TEXT for convenience.
return db.TEXT
else: else:
raise JsonSchemaDefinitionError(f"Unkown atomic type in {elt}.") raise JsonSchemaDefinitionError(f"Unkown atomic type in {elt}.")
...@@ -761,6 +766,9 @@ class JsonSchemaParser(Parser): ...@@ -761,6 +766,9 @@ class JsonSchemaParser(Parser):
ent = self._treat_record_type(elt, name) ent = self._treat_record_type(elt, name)
elif elt["type"] == "array": elif elt["type"] == "array":
ent, force_list = self._treat_list(elt, name) ent, force_list = self._treat_list(elt, name)
elif elt["type"] == "null":
# null
return None, force_list
else: else:
raise NotImplementedError( raise NotImplementedError(
f"Cannot parse items of type '{elt['type']}' (yet).") f"Cannot parse items of type '{elt['type']}' (yet).")
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
"date": { "type": "string", "format": "date" }, "date": { "type": "string", "format": "date" },
"integer": { "type": "integer", "description": "Some integer property" }, "integer": { "type": "integer", "description": "Some integer property" },
"boolean": { "type": "boolean" }, "boolean": { "type": "boolean" },
"number_prop": { "type": "number", "description": "Some float property" } "number_prop": { "type": "number", "description": "Some float property" },
"null_prop": { "type": "null", "description": "This property will never have a value." }
} }
} }
] ]
...@@ -103,7 +103,7 @@ def test_datamodel_with_atomic_properties(): ...@@ -103,7 +103,7 @@ def test_datamodel_with_atomic_properties():
assert isinstance(rt2, db.RecordType) assert isinstance(rt2, db.RecordType)
assert rt2.name == "Dataset2" assert rt2.name == "Dataset2"
assert not rt2.description assert not rt2.description
assert len(rt2.get_properties()) == 5 assert len(rt2.get_properties()) == 6
date_prop = rt2.get_property("date") date_prop = rt2.get_property("date")
assert date_prop.datatype == db.DATETIME assert date_prop.datatype == db.DATETIME
...@@ -121,6 +121,9 @@ def test_datamodel_with_atomic_properties(): ...@@ -121,6 +121,9 @@ def test_datamodel_with_atomic_properties():
float_prop2 = rt2.get_property("number_prop") float_prop2 = rt2.get_property("number_prop")
assert float_prop.datatype == float_prop2.datatype assert float_prop.datatype == float_prop2.datatype
null_prop = rt2.get_property("null_prop")
assert null_prop.datatype == db.TEXT
def test_required_no_list(): def test_required_no_list():
"""Exception must be raised when "required" is not a list.""" """Exception must be raised when "required" is not a list."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment