Skip to content

Commit 5602bd7

Browse files
support for to-zoned-date-time generic implementation
1 parent 1eaa8ab commit 5602bd7

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

build/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
setuptools>=62.0
2+
tzdata>=2023.3
23
pytest

src/main/java/com/regnosys/rosetta/generator/python/expressions/PythonExpressionGenerator.xtend

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class PythonExpressionGenerator {
9696
ToDateTimeOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d %H:%M:%S")'''
9797
ToIntOperation: '''int(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
9898
ToTimeOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%H:%M:%S").time()'''
99-
ToZonedDateTimeOperation:'''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d %H:%M:%S %z %Z")'''
99+
ToZonedDateTimeOperation:'''rune_zoned_date_time(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
100100
// Rune Operations
101101
RosettaAbsentExpression: '''(not rune_attr_exists(«generateExpression(expr.argument, ifLevel, isLambda)»))'''
102102
RosettaBinaryOperation: generateBinaryExpression(expr, ifLevel, isLambda)
Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,42 @@
11
'''to-zoned-date-time unit tests'''
2-
32
import datetime
3+
from zoneinfo import ZoneInfo
44

55
import pytest
66

77
from rosetta_dsl.test.semantic.toZonedDateTimeOp.TestToZonedDateTimeOp import TestToZonedDateTimeOp
88

9-
def test_to_zoned_date_time_passes():
10-
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-05-26 14:30:00 +0900 UTC",b=datetime.datetime(2025, 5, 26, 14, 30, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=9), 'UTC')))
9+
10+
def test_to_zoned_date_time_offset_and_time_zone():
11+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-07-07 15:30:00 +0100 Europe/Lisbon",b=datetime.datetime(2025,7, 7, 15, 30, 0, tzinfo=ZoneInfo("Europe/Lisbon")))
12+
to_zoned_date_time_test.validate_model()
13+
14+
def test_to_zoned_date_time_only_time_zone():
15+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-07-07 15:30:00 Europe/Lisbon",b=datetime.datetime(2025,7, 7, 15, 30, 0, tzinfo=ZoneInfo("Europe/Lisbon")))
16+
to_zoned_date_time_test.validate_model()
17+
18+
def test_to_zoned_date_time_only_time_zone2():
19+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-03-15 12:00:00 Zulu",b=datetime.datetime(2025,3, 15, 12, 0, 0, tzinfo=ZoneInfo("Zulu")))
1120
to_zoned_date_time_test.validate_model()
1221

22+
def test_to_zoned_date_time_only_offset():
23+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-05-26 14:30:00 +0900",b=datetime.datetime(2025,5, 26, 14, 30, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=9))))
24+
to_zoned_date_time_test.validate_model()
25+
1326
def test_to_zoned_date_time_fails():
14-
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-05-26 14:30:00 +09x0 UTC",b=datetime.datetime(2025, 5, 26, 14, 30, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=9), 'UTC')))
27+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-12-15 15:30:00 +0100 Europe/Lisbon",b=datetime.datetime(2025, 5, 26, 14, 30, 0, tzinfo=ZoneInfo("Europe/Lisbon")))
28+
with pytest.raises(Exception):
29+
to_zoned_date_time_test.validate_model()
30+
31+
def test_to_zoned_date_time_fails_format():
32+
to_zoned_date_time_test= TestToZonedDateTimeOp(a="2025-05-26 14:30:00 +09x0",b=datetime.datetime(2025, 5, 26, 14, 30, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=9))))
1533
with pytest.raises(Exception):
1634
to_zoned_date_time_test.validate_model()
1735

1836
if __name__ == "__main__":
19-
test_to_zoned_date_time_passes()
20-
test_to_zoned_date_time_fails()
37+
test_to_zoned_date_time_offset_and_time_zone()
38+
test_to_zoned_date_time_only_time_zone()
39+
test_to_zoned_date_time_only_time_zone2()
40+
test_to_zoned_date_time_only_offset()
41+
test_to_zoned_date_time_fails()
42+
test_to_zoned_date_time_fails_format()

0 commit comments

Comments
 (0)