from core.BuiltinConcepts import BuiltinConcepts from core.ExecutionContext import ExecutionContext, ContextActions from core.ReturnValue import ReturnValue from core.error import ErrorContext from evaluators.base_evaluator import EvaluatorEvalResult, EvaluatorMatchResult, OneReturnValueEvaluator from services.SheerkaPython import EvaluationContext class PythonEvaluator(OneReturnValueEvaluator): NAME = "PythonEvaluator" def __init__(self): super().__init__(self.NAME, ContextActions.EVALUATION, 50) def matches(self, context: ExecutionContext, return_value: ReturnValue) -> EvaluatorMatchResult: return EvaluatorMatchResult(return_value.status and context.sheerka.isinstance(return_value.value, BuiltinConcepts.PYTHON_CODE)) def eval(self, context: ExecutionContext, evaluation_context: object, return_value: ReturnValue) -> EvaluatorEvalResult: sheerka = context.sheerka fragment = return_value.value.pf evaluated = sheerka.evaluate_python(context, EvaluationContext(), fragment) if isinstance(evaluated, ErrorContext): return EvaluatorEvalResult([ReturnValue(self.name, False, evaluated, parents=[return_value])], []) else: return EvaluatorEvalResult([ReturnValue(self.name, True, evaluated, parents=[return_value])], [return_value])