Skip to content

Commit 289db6e

Browse files
authored
refactor: allow datetimes without +, defaulting to + (#435)
datetimes without plus at the start should be mapped to datetimes with + fixes #434
1 parent 8307e7a commit 289db6e

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

src/core/parsers/base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,9 @@ def parse_value_time(self, v):
314314
else:
315315
calendar_model = "http://www.wikidata.org/entity/Q1985727" # Gregorian
316316

317+
if not match.group("sign"):
318+
v = "+" + v
319+
317320
# Remove trailing precision if present (e.g. /11)
318321
v_clean = re.sub(r"/\d+$", "", v)
319322

src/core/tests/test_base_parser.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,45 @@ def test_parse_value_time_custom_calendar(self):
389389
}
390390
self.assertEqual(parser.parse_value("+1967-00-00T00:00:00Z/9/C999999"), ret)
391391

392+
def test_parse_value_time_without_plus_adds_plus(self):
393+
parser = BaseParser()
394+
ret = {
395+
"type": "time",
396+
"value": {
397+
"time": "+1967-01-17T00:00:00Z",
398+
"precision": 11,
399+
"calendarmodel": "http://www.wikidata.org/entity/Q1985727",
400+
},
401+
}
402+
self.assertEqual(parser.parse_value("1967-01-17T00:00:00Z/11"), ret)
403+
ret = {
404+
"type": "time",
405+
"value": {
406+
"time": "+2026-01-01T00:00:00Z",
407+
"precision": 9,
408+
"calendarmodel": "http://www.wikidata.org/entity/Q1985727",
409+
},
410+
}
411+
self.assertEqual(parser.parse_value("2026-01-01T00:00:00Z/9"), ret)
412+
ret = {
413+
"type": "time",
414+
"value": {
415+
"time": "-1967-01-00T00:00:00Z",
416+
"precision": 10,
417+
"calendarmodel": "http://www.wikidata.org/entity/Q1985727",
418+
},
419+
}
420+
self.assertEqual(parser.parse_value("-1967-01-00T00:00:00Z/10"), ret)
421+
422+
def test_parse_value_time_other_signs_are_none(self):
423+
parser = BaseParser()
424+
self.assertIsNone(parser.parse_value("x1967-01-01T00:00:00Z/10"))
425+
self.assertIsNone(parser.parse_value("_1967-01-01T00:00:00Z/10"))
426+
self.assertIsNone(parser.parse_value(":1967-01-01T00:00:00Z/10"))
427+
self.assertIsNone(parser.parse_value(";1967-01-01T00:00:00Z/10"))
428+
self.assertIsNone(parser.parse_value("=1967-01-01T00:00:00Z/10"))
429+
self.assertIsNone(parser.parse_value("s1967-01-01T00:00:00Z/10"))
430+
392431
def test_parse_value_location_earth(self):
393432
parser = BaseParser()
394433
ret = {

0 commit comments

Comments
 (0)