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

ENH: Discard integer enums for now

parent de034a6e
No related branches found
No related tags found
2 merge requests!39Release 0.4.0,!33F json schema datamodel
Pipeline #20714 passed
......@@ -664,6 +664,12 @@ class JsonSchemaParser(Parser):
return rt
def _treat_enum(self, elt: dict, name: str):
if "type" in elt and elt["type"] == "integer":
raise NotImplementedError(
"Integer-enums are not allowd until "
"https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/224 "
"has been fixed."
)
rt = db.RecordType(name=name)
for enum_elt in elt["enum"]:
rec = db.Record(name=self._stringify(enum_elt))
......
......@@ -7,9 +7,9 @@
"type": "string",
"enum": ["CC-BY", "CC-BY-SA", "CC0", "restricted access"]
},
"int_enum": {
"type": "integer",
"enum": [1, 2, 3]
"number_enum": {
"type": "number",
"enum": [1.1, 2.2, 3.3]
}
},
"required": ["license"]
......
{
"title": "Dataset",
"description": "Some description",
"type": "object",
"properties": {
"int_enum": {
"type": "integer",
"enum": [1, 2, 3]
}
}
}
......@@ -158,15 +158,41 @@ def test_enum():
assert model[name].has_parent(model["license"])
# Also allow enums with non-string types
number_enums = ["1.1", "2.2", "3.3"]
for name in ["number_enum"] + number_enums:
assert name in model
assert isinstance(model["number_enum"], db.RecordType)
assert model["Dataset"].get_property("number_enum") is not None
assert model["Dataset"].get_property("number_enum").is_reference()
assert model["Dataset"].get_property(
"number_enum").datatype.name == "number_enum"
for name in number_enums:
assert isinstance(model[name], db.Record)
assert model[name].name == name
assert len(model[name].parents) == 1
assert model[name].has_parent(model["number_enum"])
@pytest.mark.xfail(reason="Don't allow integer enums until https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/224 has been fixed")
def test_int_enum():
"""Check an enum property with type: integer"""
# @author Florian Spreckelsen
# @date 2022-03-22
model = parse_model_from_json_schema(os.path.join(
FILEPATH, "datamodel_int_enum_broken.schema.json"))
int_enums = ["1", "2", "3"]
for name in ["int_enum"] + int_enums:
for name in ["Dataset", "int_enum"] + int_enums:
assert name in model
assert isinstance(model["int_enum"], db.RecordType)
assert isinstance(model["Dataset"], db.RecordType)
assert model["Dataset"].get_property("int_enum") is not None
assert model["Dataset"].get_property("int_enum").is_reference()
assert model["Dataset"].get_property("int_enum").is_reference
assert model["Dataset"].get_property(
"int_enum").datatype.name == "int_enum"
assert isinstance(model["int_enum"], db.RecordType)
for name in int_enums:
assert isinstance(model[name], db.Record)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment