diff --git a/src/caosadvancedtools/json_schema_exporter.py b/src/caosadvancedtools/json_schema_exporter.py index a64b0e05dc438bebf509bed38f02507f394c3d2c..2c283d670018f807b16638e0bfc5f677d5677e84 100644 --- a/src/caosadvancedtools/json_schema_exporter.py +++ b/src/caosadvancedtools/json_schema_exporter.py @@ -58,6 +58,8 @@ def _make_prop_from_prop(prop: db.Property, additional_properties: bool, instead. """ + if not additional_options_for_text_props: + additional_options_for_text_props = {} if prop.datatype == db.TEXT or prop.datatype == db.DATETIME: text_format = None text_pattern = None @@ -139,7 +141,19 @@ def _make_text_property(description="", text_format=None, text_pattern=None): prop["description"] = description if text_format is not None: if isinstance(text_format, list): - prop["anyOf"] = [{"format": tf} for tf in text_format] + # We want the type inside the options, not in the head: + # "datetime property": { + # "anyOf": [ + # { + # "type": "string", + # "format": "date" + # }, + # { + # "type": "string", + # "format": "date-time" + # }]} + prop.pop("type") + prop["anyOf"] = [{"type": "string", "format": tf} for tf in text_format] else: prop["format"] = text_format if text_pattern is not None: diff --git a/unittests/test_json_schema_exporter.py b/unittests/test_json_schema_exporter.py index c9194562097283fc8e4a15f2c57161cf534b0fe2..937e1b1b625f5c81db2113f4008b00af100305ae 100644 --- a/unittests/test_json_schema_exporter.py +++ b/unittests/test_json_schema_exporter.py @@ -125,12 +125,20 @@ def test_rt_with_scalar_props(): assert props["SimpleText"]["description"] == "This is a simple text" assert "ObligatoryDatetime" in props - assert props["ObligatoryDatetime"]["type"] == "string" + assert "type" not in props["ObligatoryDatetime"] assert "anyOf" in props["ObligatoryDatetime"] assert len(props["ObligatoryDatetime"]["anyOf"]) == 2 - fmts = [fmt["format"] for fmt in props["ObligatoryDatetime"]["anyOf"]] - assert "date" in fmts - assert "date-time" in fmts + date_found = 0 + datetime_found = 0 + for option in props["ObligatoryDatetime"]["anyOf"]: + assert option["type"] == "string" + fmt = option["format"] + if fmt == "date": + date_found += 1 + if fmt == "date-time": + datetime_found += 1 + assert date_found == 1 + assert datetime_found == 1 assert "JustDateNoTime" in props assert props["JustDateNoTime"]["type"] == "string"