15
15
from datamimic_ce .constants .element_constants import (
16
16
EL_ARRAY ,
17
17
EL_CONDITION ,
18
+ EL_CONSTRAINTS ,
18
19
EL_DATABASE ,
19
20
EL_ECHO ,
20
21
EL_ELEMENT ,
32
33
EL_MONGODB ,
33
34
EL_NESTED_KEY ,
34
35
EL_REFERENCE ,
36
+ EL_RULE ,
35
37
EL_SETUP ,
36
38
EL_VARIABLE ,
37
39
)
38
40
from datamimic_ce .logger import logger
39
41
from datamimic_ce .parsers .array_parser import ArrayParser
40
42
from datamimic_ce .parsers .condition_parser import ConditionParser
43
+ from datamimic_ce .parsers .constraints_parser import ConstraintsParser
41
44
from datamimic_ce .parsers .database_parser import DatabaseParser
42
45
from datamimic_ce .parsers .echo_parser import EchoParser
43
46
from datamimic_ce .parsers .element_parser import ElementParser
54
57
from datamimic_ce .parsers .memstore_parser import MemstoreParser
55
58
from datamimic_ce .parsers .nested_key_parser import NestedKeyParser
56
59
from datamimic_ce .parsers .reference_parser import ReferenceParser
60
+ from datamimic_ce .parsers .rule_parser import RuleParser
57
61
from datamimic_ce .parsers .variable_parser import VariableParser
58
62
from datamimic_ce .statements .array_statement import ArrayStatement
59
63
from datamimic_ce .statements .composite_statement import CompositeStatement
@@ -109,6 +113,7 @@ def get_valid_sub_elements_set_by_tag(ele_tag: str) -> set | None:
109
113
EL_ELEMENT ,
110
114
EL_ARRAY ,
111
115
EL_CONDITION ,
116
+ EL_CONSTRAINTS ,
112
117
},
113
118
EL_CONDITION : {EL_IF , EL_ELSE_IF , EL_ELSE },
114
119
EL_GENERATE : {
@@ -122,6 +127,7 @@ def get_valid_sub_elements_set_by_tag(ele_tag: str) -> set | None:
122
127
EL_ECHO ,
123
128
EL_CONDITION ,
124
129
EL_INCLUDE ,
130
+ EL_CONSTRAINTS ,
125
131
},
126
132
EL_INCLUDE : {EL_SETUP },
127
133
EL_ITEM : {EL_KEY , EL_NESTED_KEY , EL_LIST , EL_ARRAY , EL_ELEMENT },
@@ -130,6 +136,7 @@ def get_valid_sub_elements_set_by_tag(ele_tag: str) -> set | None:
130
136
EL_IF : None ,
131
137
EL_ELSE_IF : None ,
132
138
EL_ELSE : None ,
139
+ EL_CONSTRAINTS : {EL_RULE },
133
140
}
134
141
135
142
return valid_sub_element_dict .get (ele_tag , set ())
@@ -189,6 +196,10 @@ def get_parser_by_element(class_factory_util: BaseClassFactoryUtil, element: Ele
189
196
return ElementParser (class_factory_util , element = element , properties = properties )
190
197
elif tag == EL_GENERATOR :
191
198
return GeneratorParser (class_factory_util , element = element , properties = properties )
199
+ elif tag == EL_CONSTRAINTS :
200
+ return ConstraintsParser (class_factory_util , element = element , properties = properties )
201
+ elif tag == EL_RULE :
202
+ return RuleParser (class_factory_util , element = element , properties = properties )
192
203
else :
193
204
raise ValueError (f"Cannot get parser for element <{ tag } >" )
194
205
@@ -238,9 +249,9 @@ def parse_sub_elements(
238
249
| GeneratorParser ,
239
250
):
240
251
stmt = parser .parse ()
241
- elif isinstance (parser , KeyParser ):
252
+ elif isinstance (parser , KeyParser | RuleParser ):
242
253
stmt = parser .parse (descriptor_dir = descriptor_dir , parent_stmt = parent_stmt )
243
- elif isinstance (parser , ConditionParser ):
254
+ elif isinstance (parser , ConditionParser | ConstraintsParser ):
244
255
stmt = parser .parse (
245
256
descriptor_dir = descriptor_dir , parent_stmt = cast (CompositeStatement , parent_stmt )
246
257
)
0 commit comments