Skip to content

Commit f8e79f9

Browse files
authored
Merge pull request #372 from dalito/relax-datetime-pre-py311
Consistent datetime parsing across all py-versions
2 parents 727b31c + 79ccad2 commit f8e79f9

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

linkml_runtime/utils/metamodelcore.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,11 @@ def __new__(cls, value: Union[str, datetime.datetime, Literal]) -> str:
301301
else:
302302
if "T" in str(value):
303303
value = isodate.parse_datetime(value)
304-
else:
304+
elif " " in value.strip():
305305
value = isodate.parse_datetime("T".join(value.strip().split(' ', 1)))
306+
else:
307+
# As datetime.fromisoformat allows dates to be parsed as datetime we do the same.
308+
value = isodate.parse_datetime(f"{value.strip()}T00:00:00")
306309
return value.isoformat()
307310
except (TypeError, ValueError) as e:
308311
if is_strict():

tests/test_utils/test_metamodelcore.py

+2
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,10 @@ def test_datetime(self):
193193
self.assertEqual('2019-07-06 17:22:39.007300', vstr) # Note that this has no 'T'
194194
self.assertEqual('2019-07-06T17:22:39.007300', XSDDateTime(vstr))
195195
self.assertEqual('2019-07-06T17:22:39+00:00', XSDDateTime("2019-07-06T17:22:39Z"))
196+
self.assertEqual('2019-07-06T00:00:00', XSDDateTime("2019-07-06")) # Date as datetime
196197
with self.assertRaises(ValueError):
197198
XSDDateTime('Jan 12, 2019')
199+
198200
lax()
199201
self.assertEqual('penguins', XSDDateTime('penguins'))
200202
XSDDateTime(datetime.datetime.now())

0 commit comments

Comments
 (0)