Refactored Caching, Refactored BnfNodeParser, Introduced Sphinx
This commit is contained in:
+39
-10
@@ -1,8 +1,9 @@
|
||||
import ast
|
||||
|
||||
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept, BuiltinConcepts
|
||||
from core.concept import Concept, DEFINITION_TYPE_BNF
|
||||
from core.concept import Concept, DEFINITION_TYPE_BNF, DEFINITION_TYPE_DEF
|
||||
from core.sheerka.ExecutionContext import ExecutionContext
|
||||
from parsers.BnfNodeParser import StrMatch
|
||||
from parsers.BnfParser import BnfParser
|
||||
from sdp.sheerkaDataProvider import Event
|
||||
|
||||
@@ -28,8 +29,8 @@ class BaseTest:
|
||||
post="isinstance(res, int)",
|
||||
body="def func(x,y):\n return x+y\nfunc(a,b)",
|
||||
desc="specific description")
|
||||
concept.def_prop("a", "value1")
|
||||
concept.def_prop("b", "value2")
|
||||
concept.def_var("a", "value1")
|
||||
concept.def_var("b", "value2")
|
||||
|
||||
return concept
|
||||
|
||||
@@ -41,15 +42,17 @@ class BaseTest:
|
||||
|
||||
def init_concepts(self, *concepts, **kwargs):
|
||||
sheerka = self.get_sheerka(**kwargs)
|
||||
context = self.get_context(sheerka)
|
||||
create_new = kwargs.get("create_new", False)
|
||||
|
||||
context_args = dict([(k, v) for k, v in kwargs.items() if k in ["sheerka", "eval_body", "eval_where"]])
|
||||
context = self.get_context(sheerka, **context_args)
|
||||
create_new = kwargs.get("create_new", None)
|
||||
|
||||
result = []
|
||||
for c in concepts:
|
||||
if isinstance(c, str):
|
||||
c = Concept(c)
|
||||
|
||||
if c.metadata.definition:
|
||||
if c.metadata.definition and c.metadata.definition_type != DEFINITION_TYPE_DEF:
|
||||
bnf_parser = BnfParser()
|
||||
res = bnf_parser.parse(context, c.metadata.definition)
|
||||
if res.status:
|
||||
@@ -57,8 +60,8 @@ class BaseTest:
|
||||
c.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
else:
|
||||
raise Exception(f"Error in bnf definition '{c.metadata.definition}'", sheerka.get_error(res))
|
||||
sheerka.create_new_concept(context, c)
|
||||
elif create_new:
|
||||
|
||||
if create_new:
|
||||
sheerka.create_new_concept(context, c)
|
||||
else:
|
||||
c.init_key()
|
||||
@@ -79,8 +82,8 @@ class BaseTest:
|
||||
"""True ret_val + add concept in cache"""
|
||||
if isinstance(obj, Concept):
|
||||
obj.init_key()
|
||||
if obj.key not in sheerka.cache_by_key:
|
||||
sheerka.cache_by_key[obj.key] = obj
|
||||
if sheerka.has_key(obj.key):
|
||||
sheerka.add_in_cache(obj)
|
||||
return sheerka.ret(who, True, obj)
|
||||
|
||||
@staticmethod
|
||||
@@ -93,3 +96,29 @@ class BaseTest:
|
||||
source=source or concept.name,
|
||||
value=concept,
|
||||
try_parsed=concept))
|
||||
|
||||
@staticmethod
|
||||
def create_concept_lite(sheerka, name, variables=None, bnf=None):
|
||||
concept = Concept(name) if isinstance(name, str) else name
|
||||
if variables:
|
||||
for v in variables:
|
||||
concept.def_var(v)
|
||||
if bnf:
|
||||
concept.bnf = bnf
|
||||
concept.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
concept.init_key()
|
||||
sheerka.set_id_if_needed(concept, False)
|
||||
sheerka.add_in_cache(concept)
|
||||
return concept
|
||||
|
||||
@staticmethod
|
||||
def bnf_concept(concept, expression=None):
|
||||
if isinstance(concept, Concept):
|
||||
name = concept.name
|
||||
else:
|
||||
name = concept
|
||||
concept = Concept(concept)
|
||||
|
||||
concept.bnf = expression or StrMatch(name)
|
||||
concept.metadata.definition_type = DEFINITION_TYPE_BNF
|
||||
return concept
|
||||
|
||||
Reference in New Issue
Block a user