Skip to content

Commit c851e15

Browse files
Parse operators implementation done with testing
1 parent 0bac9b1 commit c851e15

File tree

5 files changed

+60
-0
lines changed

5 files changed

+60
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ import com.regnosys.rosetta.rosetta.expression.ToStringOperation
4242
import com.regnosys.rosetta.rosetta.expression.ToDateOperation
4343
import com.regnosys.rosetta.rosetta.expression.ToDateTimeOperation
4444
import com.regnosys.rosetta.rosetta.expression.ToIntOperation
45+
import com.regnosys.rosetta.rosetta.expression.ToTimeOperation
46+
import com.regnosys.rosetta.rosetta.expression.ToZonedDateTimeOperation
4547
import com.regnosys.rosetta.rosetta.expression.ToEnumOperation
4648
import com.regnosys.rosetta.rosetta.expression.RosettaDeepFeatureCall
4749
import com.regnosys.rosetta.rosetta.expression.MinOperation
@@ -92,6 +94,8 @@ class PythonExpressionGenerator {
9294
ToDateOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d").date()'''
9395
ToDateTimeOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d %H:%M:%S")'''
9496
ToIntOperation: '''int(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
97+
ToTimeOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%H:%M:%S").time()'''
98+
ToZonedDateTimeOperation:'''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d %H:%M:%S %z %Z")'''
9599
// Rune Operations
96100
RosettaAbsentExpression: '''(not rune_attr_exists(«generateExpression(expr.argument, ifLevel, isLambda)»))'''
97101
RosettaBinaryOperation: generateBinaryExpression(expr, ifLevel, isLambda)
@@ -253,6 +257,7 @@ class PythonExpressionGenerator {
253257

254258
return _builder.toString
255259
}
260+
256261

257262
private def String generateReference(RosettaReference expr, int ifLevel, boolean isLambda) {
258263
switch (expr) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace rosetta_dsl.test.semantic.toTimeOp : <"generate Python unit tests from Rosetta.">
2+
3+
type TestToTimeOp:
4+
a string (1..1)
5+
b time (0..1)
6+
condition Test:
7+
b = a to-time
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace rosetta_dsl.test.semantic.toZonedDateTimeOp : <"generate Python unit tests from Rosetta.">
2+
3+
type TestToZonedDateTimeOp:
4+
a string (1..1)
5+
b zonedDateTime (0..1)
6+
condition Test:
7+
b = a to-zoned-date-time
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'''to-date-time unit tests'''
2+
3+
import datetime
4+
import time
5+
6+
import pytest
7+
8+
from rosetta_dsl.test.semantic.toTimeOp.TestToTimeOp import TestToTimeOp
9+
10+
def test_to_time_passes():
11+
to_time_test= TestToTimeOp(a="11:45:23",b=datetime.time(11,45,23))
12+
to_time_test.validate_model()
13+
14+
def test_to_time_fails():
15+
to_date_time_test=TestToTimeOp(a="14-30-00",b=datetime.time(14,30,0))
16+
with pytest.raises(Exception):
17+
to_date_time_test.validate_model()
18+
19+
if __name__ == "__main__":
20+
test_to_time_passes()
21+
test_to_time_fails()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'''to-zoned-date-time unit tests'''
2+
3+
import datetime
4+
5+
import pytest
6+
7+
from rosetta_dsl.test.semantic.toZonedDateTimeOp.TestToZonedDateTimeOp import TestToZonedDateTimeOp
8+
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')))
11+
to_zoned_date_time_test.validate_model()
12+
13+
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')))
15+
with pytest.raises(Exception):
16+
to_zoned_date_time_test.validate_model()
17+
18+
if __name__ == "__main__":
19+
test_to_zoned_date_time_passes()
20+
test_to_zoned_date_time_fails()

0 commit comments

Comments
 (0)