def execute(self, requires: Dict[object, object], instance: Resolver, queue: QueueScheduler) -> object: """ Evaluate this statement """ LOGGER.log(LOG_LEVEL_TRACE, "executing subconstructor for %s implement %s", self.type, self.implements.location) condition = self.implements.constraint.execute(requires, instance, queue) try: inmanta_type.Bool().validate(condition) except RuntimeException as e: e.set_statement(self.implements) e.msg = ( "Invalid value `%s`: the condition for a conditional implementation can only be a boolean expression" % condition) raise e if not condition: return None myqueue = queue.for_tracker(ImplementsTracker(self, instance)) implementations = self.implements.implementations for impl in implementations: if instance.add_implementation(impl): # generate a subscope/namespace for each loop xc = ExecutionContext( impl.statements, instance.for_namespace(impl.statements.namespace)) xc.emit(myqueue) return None
def execute(self, requires: Dict[object, ResultVariable], instance: Resolver, queue: QueueScheduler) -> object: """ Evaluate this statement """ expr = self.implements.constraint if not expr.execute(requires, instance, queue): return None myqueue = queue.for_tracker(ImplementsTracker(self, instance)) implementations = self.implements.implementations for impl in implementations: if instance.add_implementation(impl): # generate a subscope/namespace for each loop xc = ExecutionContext(impl.statements, instance.for_namespace(impl.statements.namespace)) xc.emit(myqueue) return None