Skip to content

Commit 0bac9b1

Browse files
First parse operators implementation and tests
1 parent dadcfaa commit 0bac9b1

File tree

7 files changed

+84
-0
lines changed

7 files changed

+84
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ import com.regnosys.rosetta.rosetta.expression.SortOperation
3939
import com.regnosys.rosetta.rosetta.expression.SumOperation
4040
import com.regnosys.rosetta.rosetta.expression.ThenOperation
4141
import com.regnosys.rosetta.rosetta.expression.ToStringOperation
42+
import com.regnosys.rosetta.rosetta.expression.ToDateOperation
43+
import com.regnosys.rosetta.rosetta.expression.ToDateTimeOperation
44+
import com.regnosys.rosetta.rosetta.expression.ToIntOperation
4245
import com.regnosys.rosetta.rosetta.expression.ToEnumOperation
4346
import com.regnosys.rosetta.rosetta.expression.RosettaDeepFeatureCall
4447
import com.regnosys.rosetta.rosetta.expression.MinOperation
@@ -86,6 +89,9 @@ class PythonExpressionGenerator {
8689
SwitchOperation: generateSwitchOperation(expr, ifLevel, isLambda)
8790
ToEnumOperation: '''«expr.enumeration.name»(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
8891
ToStringOperation: '''rune_str(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
92+
ToDateOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d").date()'''
93+
ToDateTimeOperation: '''datetime.datetime.strptime(«generateExpression(expr.argument, ifLevel, isLambda)», "%Y-%m-%d %H:%M:%S")'''
94+
ToIntOperation: '''int(«generateExpression(expr.argument, ifLevel, isLambda)»)'''
8995
// Rune Operations
9096
RosettaAbsentExpression: '''(not rune_attr_exists(«generateExpression(expr.argument, ifLevel, isLambda)»))'''
9197
RosettaBinaryOperation: generateBinaryExpression(expr, ifLevel, isLambda)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace rosetta_dsl.test.semantic.toDateOp : <"generate Python unit tests from Rosetta.">
2+
3+
type TestDateOp:
4+
a string (1..1)
5+
b date (0..1)
6+
condition Test:
7+
b = a to-date
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace rosetta_dsl.test.semantic.toDateTimeOp : <"generate Python unit tests from Rosetta.">
2+
3+
type TestDateTimeOp:
4+
a string (1..1)
5+
b dateTime (0..1)
6+
condition Test:
7+
b = a to-date-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.toIntOp : <"generate Python unit tests from Rosetta.">
2+
3+
type TestToIntOp:
4+
a string (1..1)
5+
b int (0..1)
6+
condition Test:
7+
b = a to-int
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'''to-date unit tests'''
2+
from datetime import date
3+
4+
import pytest
5+
6+
from rosetta_dsl.test.semantic.toDateOp.TestDateOp import TestDateOp
7+
8+
def test_to_date_passes():
9+
to_date_test= TestDateOp(a="2025-05-26",b=date(2025, 5, 26))
10+
to_date_test.validate_model()
11+
def test_to_date_invalid_format_fails():
12+
to_date_test= TestDateOp(a="2025/05/26", b=date(2025,5,26))
13+
with pytest.raises(Exception):
14+
to_date_test.validate_model()
15+
16+
if __name__ == "__main__":
17+
test_to_date_passes()
18+
test_to_date_invalid_format_fails()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'''to-date-time unit tests'''
2+
3+
import datetime
4+
5+
import pytest
6+
7+
from rosetta_dsl.test.semantic.toDateTimeOp.TestDateTimeOp import TestDateTimeOp
8+
9+
def test_to_date_time_passes():
10+
to_date_time_test= TestDateTimeOp(a="2025-05-26 14:30:00",b=datetime.datetime(2025, 5, 26,14,30,0))
11+
to_date_time_test.validate_model()
12+
13+
def test_to_date_time_fails():
14+
to_date_time_test=TestDateTimeOp(a="2025-05-26 14-30-00",b=datetime.datetime(2025, 5, 26,14,30,0))
15+
with pytest.raises(Exception):
16+
to_date_time_test.validate_model()
17+
18+
if __name__ == "__main__":
19+
test_to_date_time_passes()
20+
test_to_date_time_fails()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'''to-int unit tests'''
2+
3+
import pytest
4+
5+
from rosetta_dsl.test.semantic.toIntOp.TestToIntOp import TestToIntOp
6+
7+
8+
def test_to_int_passes():
9+
to_int_test = TestToIntOp(a="1",b=1)
10+
to_int_test.validate_model()
11+
12+
def test_to_int_fails():
13+
to_int_test= TestToIntOp(a="a",b=1)
14+
with pytest.raises(Exception):
15+
to_int_test.validate_model()
16+
17+
if __name__ == "__main__":
18+
test_to_int_passes()
19+
test_to_int_fails()

0 commit comments

Comments
 (0)