Skip to content

Commit c486189

Browse files
Merge pull request #28 from priyanka-amarnani/add-zoned-date-time-generic-impl
Add zoned date time generic impl
2 parents d542052 + efe1118 commit c486189

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

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)

test/python_setup/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
Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +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.zoned_date_time_operator.ZonedDateTimeOperatorTest import ZonedDateTimeOperatorTest
88

9-
def test_to_zoned_date_time_passes():
10-
'''no doc'''
11-
to_zoned_date_time_test= ZonedDateTimeOperatorTest(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= ZonedDateTimeOperatorTest(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= ZonedDateTimeOperatorTest(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= ZonedDateTimeOperatorTest(a="2025-03-15 12:00:00 Zulu",b=datetime.datetime(2025,3, 15, 12, 0, 0, tzinfo=ZoneInfo("Zulu")))
1220
to_zoned_date_time_test.validate_model()
1321

22+
def test_to_zoned_date_time_only_offset():
23+
to_zoned_date_time_test= ZonedDateTimeOperatorTest(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+
1426
def test_to_zoned_date_time_fails():
15-
'''no doc'''
16-
to_zoned_date_time_test= ZonedDateTimeOperatorTest(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= ZonedDateTimeOperatorTest(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= ZonedDateTimeOperatorTest(a="2025-05-26 14:30:00 +09x0",b=datetime.datetime(2025, 5, 26, 14, 30, 0, tzinfo=datetime.timezone(datetime.timedelta(hours=9))))
1733
with pytest.raises(Exception):
1834
to_zoned_date_time_test.validate_model()
1935

2036
if __name__ == "__main__":
21-
test_to_zoned_date_time_passes()
22-
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)