import ast
-from lib.utils import SourceLogger, Schema
+from lib.utils import SourceLogger, Schema
from .common import NodeProperty, ConfigNodeError, NodeDependency
from .lazy import LazyLookup
from .rewriter import ConfigNodeASTRewriter
+from .ast_validator import NodeValidator
+from .rules import SyntaxRule
+
+validator = NodeValidator(SyntaxRule())
class ConfigDecorator:
Label = Schema(ast.Constant)
NodeProperty.Readonly[self] = False
NodeProperty.Status[self] = "Empty"
- def set_node_body(self, ast_nodes, rewriter = ConfigNodeASTRewriter):
- new_ast = rewriter(self).visit(ast.Module(ast_nodes))
+ def set_node_body(self, ast_nodes):
+ self.__exec = ast.Module(ast_nodes, [])
+
+ def apply_node_body(self, rewriter = ConfigNodeASTRewriter):
+ assert isinstance(self.__exec, ast.Module)
+
+ new_ast = self.__exec
+ validator.validate(self, new_ast)
+
+ new_ast = rewriter(self).rewrite(new_ast)
NodeDependency.try_create(self)
fn_name = f"__fn_{self._name}"