Implemented ConceptManager with concept creation, modification and deletion
This commit is contained in:
@@ -4,6 +4,7 @@ from core.builtin_concepts import BuiltinConcepts
|
||||
from core.builtin_helpers import expect_one, only_successful, parse_unrecognized, evaluate, ensure_concept
|
||||
from core.concept import Concept, DoNotResolve, ConceptParts, InfiniteRecursionResolved, NotInit, AllConceptParts, \
|
||||
concept_part_value
|
||||
from core.sheerka.services.SheerkaConceptManager import SheerkaConceptManager
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.sheerka.services.sheerka_service import BaseService
|
||||
from core.tokenizer import Tokenizer
|
||||
@@ -224,13 +225,12 @@ class SheerkaEvaluateConcept(BaseService):
|
||||
"""
|
||||
|
||||
def is_only_successful(r):
|
||||
# return False
|
||||
return context.sheerka.isinstance(r, BuiltinConcepts.RETURN_VALUE) and \
|
||||
context.sheerka.isinstance(r.body, BuiltinConcepts.ONLY_SUCCESSFUL)
|
||||
|
||||
def parse_token_concept(s):
|
||||
if s.startswith("c:") and (identifier := unstr_concept(s)) != (None, None):
|
||||
return self.sheerka.resolve(identifier)
|
||||
return self.sheerka.fast_resolve(identifier)
|
||||
return None
|
||||
|
||||
for part_key in AllConceptParts:
|
||||
@@ -247,11 +247,12 @@ class SheerkaEvaluateConcept(BaseService):
|
||||
if source.strip() == "":
|
||||
concept.get_compiled()[part_key] = DoNotResolve(source)
|
||||
else:
|
||||
# first case, when the metadata references another concept via c:xxx: keyword
|
||||
if concept_found := parse_token_concept(source):
|
||||
# the compiled can be a reference to another concept...
|
||||
context.log(f"Recognized concept '{concept_found}'", self.NAME)
|
||||
concept.get_compiled()[part_key] = concept_found
|
||||
else:
|
||||
# ...or a list of ReturnValueConcept to resolve
|
||||
res = parse_unrecognized(context,
|
||||
source,
|
||||
parsers="all",
|
||||
@@ -272,11 +273,12 @@ class SheerkaEvaluateConcept(BaseService):
|
||||
if default_value.strip() == "":
|
||||
concept.get_compiled()[var_name] = DoNotResolve(default_value)
|
||||
else:
|
||||
# first case, when the metadata references another concept via c:xxx: keyword
|
||||
if concept_found := parse_token_concept(default_value):
|
||||
# the compiled can be a reference to another concept...
|
||||
context.log(f"Recognized concept '{concept_found}'", self.NAME)
|
||||
concept.get_compiled()[var_name] = concept_found
|
||||
else:
|
||||
# ...or a list of ReturnValueConcept to resolve
|
||||
res = parse_unrecognized(context,
|
||||
default_value,
|
||||
parsers="all",
|
||||
@@ -285,7 +287,9 @@ class SheerkaEvaluateConcept(BaseService):
|
||||
concept.get_compiled()[var_name] = res.body.body if is_only_successful(res) else res
|
||||
|
||||
# Updates the cache of concepts when possible
|
||||
if self.sheerka.has_id(concept.id):
|
||||
# This piece of code is not used, a the compile part is removed by sheerka.new_from_template()
|
||||
service = context.sheerka.services[SheerkaConceptManager.NAME]
|
||||
if service.has_id(concept.id):
|
||||
self.sheerka.get_by_id(concept.id).set_compiled(concept.get_compiled())
|
||||
|
||||
def resolve(self,
|
||||
|
||||
Reference in New Issue
Block a user