Added first version of DebugManager. Implemented draft of the rule engine

This commit is contained in:
2020-11-20 13:41:45 +01:00
parent cd066881b4
commit 315f8ea09b
156 changed files with 8388 additions and 2852 deletions
+47
View File
@@ -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])