Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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])
|
||||
Reference in New Issue
Block a user