Files
Sheerka-Old/src/evaluators/RuleEvaluator.py
T

48 lines
1.6 KiB
Python

from core.builtin_concepts import BuiltinConcepts, ParserResultConcept
from core.rule import Rule, ACTION_TYPE_DEFERRED
from evaluators.BaseEvaluator import OneReturnValueEvaluator
class RuleEvaluator(OneReturnValueEvaluator):
"""
This first version will only returns the rule found by the parser
"""
NAME = "Rule"
def __init__(self):
"""
"""
super().__init__(self.NAME, [BuiltinConcepts.EVALUATION], 50)
def matches(self, context, return_value):
if not return_value.status:
return False
if not isinstance(return_value.value, ParserResultConcept):
return False
value = return_value.value.value
return isinstance(value, Rule) or isinstance(value, list) and len(value) > 0 and isinstance(value[0], Rule)
def eval(self, context, return_value):
sheerka = context.sheerka
rules = return_value.value.value
resolved = []
success = True
for r in rules:
# Browse the rules to find possible deferred rules
if r.metadata.action_type == ACTION_TYPE_DEFERRED:
rule_id = sheerka.get_from_short_term_memory(context, r.id)
rule = sheerka.get_rule_by_id(str(rule_id or r.id))
resolved.append(rule)
success &= isinstance(rule, Rule)
else:
resolved.append(r)
return context.sheerka.ret(self.name,
success,
resolved if len(resolved) > 1 else resolved[0],
parents=[return_value])