diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index a0da3b24cadced579dc9b124f8ef30c86e880f4f..d806e825ccc9be2bd519b230cb2a178292505e8b 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -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).") diff --git a/unittests/json-schema-models/datamodel_atomic_properties.schema.json b/unittests/json-schema-models/datamodel_atomic_properties.schema.json index 3828f131180a839d5c9b8bc5aa1a1285717da723..7b4a23e5bb48b995d07a261bcae0a8a486b7969a 100644 --- a/unittests/json-schema-models/datamodel_atomic_properties.schema.json +++ b/unittests/json-schema-models/datamodel_atomic_properties.schema.json @@ -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." } } } ] diff --git a/unittests/test_json_schema_model_parser.py b/unittests/test_json_schema_model_parser.py index ae5ed5a59ca0edf140a39e87736b196c4de3064b..90517ebdc37a3099617363a8610d98e4437035eb 100644 --- a/unittests/test_json_schema_model_parser.py +++ b/unittests/test_json_schema_model_parser.py @@ -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."""