32 lines
1.4 KiB
Python
32 lines
1.4 KiB
Python
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
|
|
|
|
|
|
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, 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])
|