Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
+59
-18
@@ -2,9 +2,11 @@ import ast
|
||||
|
||||
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept, BuiltinConcepts
|
||||
from core.concept import Concept, DEFINITION_TYPE_BNF, DEFINITION_TYPE_DEF
|
||||
from core.rule import Rule
|
||||
from core.sheerka.ExecutionContext import ExecutionContext
|
||||
from core.sheerka.services.SheerkaRuleManager import SheerkaRuleManager
|
||||
from parsers.BnfDefinitionParser import BnfDefinitionParser
|
||||
from parsers.BnfNodeParser import StrMatch
|
||||
from parsers.BnfParser import BnfParser
|
||||
from sdp.sheerkaDataProvider import Event
|
||||
|
||||
|
||||
@@ -40,6 +42,10 @@ class BaseTest:
|
||||
dump = dump.replace(to_remove, "")
|
||||
return dump
|
||||
|
||||
@staticmethod
|
||||
def dump_tokens(tokens):
|
||||
return [t.repr_value for t in tokens]
|
||||
|
||||
def init_concepts(self, *concepts, **kwargs):
|
||||
sheerka = self.get_sheerka(**kwargs)
|
||||
|
||||
@@ -52,20 +58,21 @@ class BaseTest:
|
||||
if isinstance(c, str):
|
||||
c = Concept(c)
|
||||
|
||||
if c.metadata.definition and c.metadata.definition_type != DEFINITION_TYPE_DEF:
|
||||
desc = f"Resolving BNF {c.metadata.definition}"
|
||||
if c.get_metadata().definition and c.get_metadata().definition_type != DEFINITION_TYPE_DEF:
|
||||
desc = f"Resolving BNF {c.get_metadata().definition}"
|
||||
with context.push(BuiltinConcepts.INIT_BNF,
|
||||
c,
|
||||
obj=c,
|
||||
desc=desc) as sub_context:
|
||||
|
||||
bnf_parser = BnfParser()
|
||||
res = bnf_parser.parse(sub_context, c.metadata.definition)
|
||||
bnf_parser = BnfDefinitionParser()
|
||||
res = bnf_parser.parse(sub_context, c.get_metadata().definition)
|
||||
if res.status:
|
||||
c.bnf = res.value.value
|
||||
c.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
c.set_bnf(res.value.value)
|
||||
c.get_metadata().definition_type = DEFINITION_TYPE_BNF
|
||||
else:
|
||||
raise Exception(f"Error in bnf definition '{c.metadata.definition}'", sheerka.get_error(res))
|
||||
raise Exception(f"Error in bnf definition '{c.get_metadata().definition}'",
|
||||
sheerka.get_error(res))
|
||||
|
||||
if create_new:
|
||||
sheerka.create_new_concept(context, c)
|
||||
@@ -78,6 +85,40 @@ class BaseTest:
|
||||
|
||||
return sheerka, context, *result
|
||||
|
||||
def init_format_rules(self, *rules, create_new=True, compile_rule=True, concepts=None, **kwargs):
|
||||
if concepts:
|
||||
sheerka, context, *concepts = self.init_concepts(*concepts, **kwargs)
|
||||
else:
|
||||
sheerka, context, *concepts = self.init_concepts(**kwargs)
|
||||
|
||||
if create_new:
|
||||
sheerka.cache_manager.caches[SheerkaRuleManager.FORMAT_RULE_ENTRY].cache.clear()
|
||||
sheerka.cache_manager.delete(sheerka.CONCEPTS_KEYS_ENTRY, SheerkaRuleManager.RULE_IDS)
|
||||
with sheerka.sdp.get_transaction(context.event.get_digest()) as transaction:
|
||||
transaction.clear(SheerkaRuleManager.FORMAT_RULE_ENTRY)
|
||||
|
||||
initialized = []
|
||||
for rule_blue_print in rules:
|
||||
if isinstance(rule_blue_print, tuple):
|
||||
rule = Rule("print", None, rule_blue_print[0], rule_blue_print[1])
|
||||
if not compile_rule:
|
||||
rule.metadata.is_compiled = True
|
||||
else:
|
||||
rule = rule_blue_print
|
||||
|
||||
is_enabled = rule.metadata.is_enabled
|
||||
sheerka.services[SheerkaRuleManager.NAME].init_rule(context, rule)
|
||||
if create_new:
|
||||
res = sheerka.create_new_rule(context, rule)
|
||||
initialized.append(res.body.body)
|
||||
else:
|
||||
initialized.append(rule)
|
||||
|
||||
if is_enabled is not None:
|
||||
rule.metadata.is_enabled = is_enabled
|
||||
|
||||
return sheerka, context, *initialized
|
||||
|
||||
@staticmethod
|
||||
def get_concept_instance(sheerka, concept, **kwargs):
|
||||
"""
|
||||
@@ -88,10 +129,10 @@ class BaseTest:
|
||||
:return:
|
||||
"""
|
||||
instance = sheerka.new(concept.key if isinstance(concept, Concept) else concept)
|
||||
for i, var in enumerate(instance.metadata.variables):
|
||||
for i, var in enumerate(instance.get_metadata().variables):
|
||||
if var[0] in kwargs:
|
||||
assert isinstance(kwargs[var[0]], str), "variables definitions must be string"
|
||||
instance.metadata.variables[i] = (var[0], kwargs[var[0]])
|
||||
instance.get_metadata().variables[i] = (var[0], kwargs[var[0]])
|
||||
|
||||
return instance
|
||||
|
||||
@@ -110,10 +151,10 @@ class BaseTest:
|
||||
return sheerka.ret(who, True, obj)
|
||||
|
||||
@staticmethod
|
||||
def pretval(concept, source=None, parser="parsers.name", who="some_name", status=True):
|
||||
def pretval(concept, source=None, parser="parsers.name", who=None, status=True):
|
||||
"""ParserResult ret_val (p stands for ParserResult)"""
|
||||
return ReturnValueConcept(
|
||||
who,
|
||||
who or parser,
|
||||
status,
|
||||
ParserResultConcept(parser=parser,
|
||||
source=source or concept.name,
|
||||
@@ -135,8 +176,8 @@ class BaseTest:
|
||||
for v in variables:
|
||||
concept.def_var(v)
|
||||
if bnf:
|
||||
concept.bnf = bnf
|
||||
concept.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
concept.set_bnf(bnf)
|
||||
concept.get_metadata().definition_type = DEFINITION_TYPE_BNF
|
||||
concept.init_key()
|
||||
sheerka.set_id_if_needed(concept, False)
|
||||
sheerka.add_in_cache(concept)
|
||||
@@ -150,8 +191,8 @@ class BaseTest:
|
||||
name = concept
|
||||
concept = Concept(concept)
|
||||
|
||||
concept.bnf = expression or StrMatch(name)
|
||||
concept.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
concept.set_bnf(expression or StrMatch(name))
|
||||
concept.get_metadata().definition_type = DEFINITION_TYPE_BNF
|
||||
return concept
|
||||
|
||||
@staticmethod
|
||||
@@ -164,9 +205,9 @@ class BaseTest:
|
||||
if kwargs:
|
||||
for k, v in kwargs.items():
|
||||
if k in ("body", "pre", "post", "where"):
|
||||
setattr(concept.metadata, k, v)
|
||||
setattr(concept.get_metadata(), k, v)
|
||||
else:
|
||||
concept.metadata.variables[k] = v
|
||||
concept.get_metadata().variables[k] = v
|
||||
return concept
|
||||
|
||||
def init_scenario(self, init_expressions):
|
||||
|
||||
Reference in New Issue
Block a user