|
5 | 5 | FunctionCall, |
6 | 6 | Identifier, |
7 | 7 | Literal, |
| 8 | + NodeInstance, |
8 | 9 | Publisher, |
9 | 10 | Subscriber, |
10 | 11 | Action, |
|
24 | 25 | t_string, |
25 | 26 | TType, |
26 | 27 | StructType, |
27 | | - ArrayType, |
28 | 28 | OptionalType, |
29 | 29 | BasicType, |
30 | 30 | EnumType, |
@@ -124,7 +124,6 @@ def convert_to_expression(context: Context, value: Any, ttype: TType) -> Express |
124 | 124 | ttype=ttype, |
125 | 125 | ) |
126 | 126 | elif isinstance(value, list): |
127 | | - assert isinstance(ttype, ArrayType) |
128 | 127 | return Array(elements=[convert_to_expression(context, item, ttype.ttype) for item in value], ttype=ttype) |
129 | 128 | raise ValueError(errors.UNSUPPORTED_TYPE.format(type=type(value))) |
130 | 129 |
|
@@ -264,3 +263,27 @@ def aux_replace_enums(enum_type: EnumType, expr: Expression) -> Expression: |
264 | 263 | return Array(elements=[aux_replace_enums(enum_type, e) for e in expr.elements], ttype=expr.ttype) |
265 | 264 | else: |
266 | 265 | raise ValueError(f"Unsupported expression type: {type(expr)}") |
| 266 | + |
| 267 | + |
| 268 | +def check_dependency(context: Context, node_instance: NodeInstance, dependency: Expression): |
| 269 | + expressions = [] |
| 270 | + current_expression = dependency |
| 271 | + |
| 272 | + # Split the dependency into a list of expressions, so that we can check each one of them |
| 273 | + while isinstance(current_expression, FunctionCall) and current_expression.operator.name == "and": |
| 274 | + expressions.append(current_expression.operands[0]) |
| 275 | + current_expression = current_expression.operands[1] |
| 276 | + expressions.append(current_expression) |
| 277 | + |
| 278 | + result_errors = [] |
| 279 | + for expression in expressions: |
| 280 | + if not interpret(context, expression): |
| 281 | + result_errors.append( |
| 282 | + errors.DEPENDENCY_NOT_SATISFIED.format( |
| 283 | + component_instance_type="node", |
| 284 | + name=node_instance.name.name, |
| 285 | + dependency=expression, |
| 286 | + ) |
| 287 | + ) |
| 288 | + |
| 289 | + return result_errors |
0 commit comments