From de034a6ec8d6b78ba4c0dab019ecdb20cee20cfa Mon Sep 17 00:00:00 2001
From: fspreck <f.spreckelsen@indiscale.com>
Date: Tue, 22 Mar 2022 13:09:18 +0100
Subject: [PATCH] ENH: Add "format": "date" for DATETIME properties

---
 src/caosadvancedtools/models/parser.py            |  2 +-
 .../datamodel_atomic_properties.schema.json       |  3 ++-
 .../datamodel_list_properties.schema.json         |  4 ++++
 unittests/test_json_schema_model_parser.py        | 15 +++++++++++++--
 4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py
index b4a7ab57..3bc90371 100644
--- a/src/caosadvancedtools/models/parser.py
+++ b/src/caosadvancedtools/models/parser.py
@@ -605,7 +605,7 @@ class JsonSchemaParser(Parser):
 
     def _get_atomic_datatype(self, elt):
         if elt["type"] == "string":
-            if "format" in elt and elt["format"] == "date-time":
+            if "format" in elt and elt["format"] in ["date", "date-time"]:
                 return db.DATETIME
             else:
                 return db.TEXT
diff --git a/unittests/json-schema-models/datamodel_atomic_properties.schema.json b/unittests/json-schema-models/datamodel_atomic_properties.schema.json
index 71ba3ad4..3828f131 100644
--- a/unittests/json-schema-models/datamodel_atomic_properties.schema.json
+++ b/unittests/json-schema-models/datamodel_atomic_properties.schema.json
@@ -14,7 +14,8 @@
         "title": "Dataset2",
         "type": "object",
         "properties": {
-            "date": { "type": "string", "format": "date-time" },
+            "date_time": { "type": "string", "format": "date-time" },
+            "date": { "type": "string", "format": "date" },
             "integer": { "type": "integer", "description": "Some integer property" },
             "boolean": { "type": "boolean" },
             "number_prop": { "type": "number", "description": "Some float property" }
diff --git a/unittests/json-schema-models/datamodel_list_properties.schema.json b/unittests/json-schema-models/datamodel_list_properties.schema.json
index d2f7e493..b95f468a 100644
--- a/unittests/json-schema-models/datamodel_list_properties.schema.json
+++ b/unittests/json-schema-models/datamodel_list_properties.schema.json
@@ -23,6 +23,10 @@
             "type": "array",
             "items": { "type": "string", "format": "date-time" }
         },
+        "dates": {
+            "type": "array",
+            "items": { "type": "string", "format": "date" }
+        },
         "reference": {
             "type": "array",
             "items": { "type": "object", "properties": {} }
diff --git a/unittests/test_json_schema_model_parser.py b/unittests/test_json_schema_model_parser.py
index e9d4ea4b..7ae92bfd 100644
--- a/unittests/test_json_schema_model_parser.py
+++ b/unittests/test_json_schema_model_parser.py
@@ -103,11 +103,14 @@ def test_datamodel_with_atomic_properties():
     assert isinstance(rt2, db.RecordType)
     assert rt2.name == "Dataset2"
     assert not rt2.description
-    assert len(rt2.get_properties()) == 4
+    assert len(rt2.get_properties()) == 5
 
     date_prop = rt2.get_property("date")
     assert date_prop.datatype == db.DATETIME
 
+    datetime_prop = rt2.get_property("date_time")
+    assert date_prop.datatype == db.DATETIME
+
     int_prop = rt2.get_property("integer")
     assert int_prop.datatype == db.INTEGER
     assert int_prop.description == "Some integer property"
@@ -221,7 +224,8 @@ def test_list():
         FILEPATH, "datamodel_list_properties.schema.json"))
     licenses = ["CC-BY", "CC-BY-SA", "CC0", "restricted access"]
     names = ["Dataset", "keywords", "booleans", "integers", "floats",
-             "datetimes", "reference", "reference_with_name", "event", "license"]
+             "datetimes", "dates", "reference", "reference_with_name", "event",
+             "license"]
     for name in names + licenses:
         assert name in model
 
@@ -257,6 +261,13 @@ def test_list():
     assert model["datetimes"].name == "datetimes"
     assert model["datetimes"].datatype == db.LIST(db.DATETIME)
 
+    assert dataset_rt.get_property("dates") is not None
+    assert dataset_rt.get_property(
+        "dates").datatype == db.LIST(db.DATETIME)
+    assert isinstance(model["dates"], db.Property)
+    assert model["dates"].name == "dates"
+    assert model["dates"].datatype == db.LIST(db.DATETIME)
+
     # Simple reference list property
     assert dataset_rt.get_property("reference") is not None
     assert dataset_rt.get_property("reference").is_reference()
-- 
GitLab