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
Branches
Tags
2 merge requests!39Release 0.4.0,!33F json schema datamodel
Pipeline #20714 passed
...@@ -664,6 +664,12 @@ class JsonSchemaParser(Parser): ...@@ -664,6 +664,12 @@ class JsonSchemaParser(Parser):
return rt return rt
def _treat_enum(self, elt: dict, name: str): 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) rt = db.RecordType(name=name)
for enum_elt in elt["enum"]: for enum_elt in elt["enum"]:
rec = db.Record(name=self._stringify(enum_elt)) rec = db.Record(name=self._stringify(enum_elt))
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
"type": "string", "type": "string",
"enum": ["CC-BY", "CC-BY-SA", "CC0", "restricted access"] "enum": ["CC-BY", "CC-BY-SA", "CC0", "restricted access"]
}, },
"int_enum": { "number_enum": {
"type": "integer", "type": "number",
"enum": [1, 2, 3] "enum": [1.1, 2.2, 3.3]
} }
}, },
"required": ["license"] "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(): ...@@ -158,15 +158,41 @@ def test_enum():
assert model[name].has_parent(model["license"]) assert model[name].has_parent(model["license"])
# Also allow enums with non-string types # 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"] 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 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 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( assert model["Dataset"].get_property(
"int_enum").datatype.name == "int_enum" "int_enum").datatype.name == "int_enum"
assert isinstance(model["int_enum"], db.RecordType)
for name in int_enums: for name in int_enums:
assert isinstance(model[name], db.Record) 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