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
Branches
Tags
2 merge requests!73MAINT: change wording of TableImporter argument and allow converters and...,!72Extend json-schema model parser
......@@ -77,7 +77,8 @@ JSON_SCHEMA_ATOMIC_TYPES = [
"string",
"boolean",
"integer",
"number"
"number",
"null"
]
......@@ -726,6 +727,10 @@ class JsonSchemaParser(Parser):
return db.DOUBLE
elif elt["type"] == "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:
raise JsonSchemaDefinitionError(f"Unkown atomic type in {elt}.")
......@@ -761,6 +766,9 @@ class JsonSchemaParser(Parser):
ent = self._treat_record_type(elt, name)
elif elt["type"] == "array":
ent, force_list = self._treat_list(elt, name)
elif elt["type"] == "null":
# null
return None, force_list
else:
raise NotImplementedError(
f"Cannot parse items of type '{elt['type']}' (yet).")
......
......
......@@ -18,7 +18,8 @@
"date": { "type": "string", "format": "date" },
"integer": { "type": "integer", "description": "Some integer property" },
"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():
assert isinstance(rt2, db.RecordType)
assert rt2.name == "Dataset2"
assert not rt2.description
assert len(rt2.get_properties()) == 5
assert len(rt2.get_properties()) == 6
date_prop = rt2.get_property("date")
assert date_prop.datatype == db.DATETIME
......@@ -121,6 +121,9 @@ def test_datamodel_with_atomic_properties():
float_prop2 = rt2.get_property("number_prop")
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():
"""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.
Please register or to comment