Fixed minor issues and enhancements

This commit is contained in:
2020-05-15 17:01:26 +02:00
parent b54882f994
commit 56e0a9d338
8 changed files with 59 additions and 13 deletions
@@ -1,5 +1,5 @@
from core.builtin_concepts import BuiltinConcepts
from core.builtin_helpers import expect_one
from core.builtin_helpers import expect_one, only_successful
from core.concept import Concept, DoNotResolve, ConceptParts, InfiniteRecursionResolved
CONCEPT_EVALUATION_STEPS = [
@@ -71,6 +71,11 @@ class SheerkaEvaluateConcept:
:param logger:
:return:
"""
def is_only_successful(r):
# return False
return context.sheerka.isinstance(r, BuiltinConcepts.RETURN_VALUE) and \
context.sheerka.isinstance(r.body, BuiltinConcepts.ONLY_SUCCESSFUL)
steps = [BuiltinConcepts.BEFORE_PARSING, BuiltinConcepts.PARSING, BuiltinConcepts.AFTER_PARSING]
for part_key in ConceptParts:
if part_key in concept.compiled:
@@ -88,7 +93,8 @@ class SheerkaEvaluateConcept:
to_parse = self.sheerka.ret(context.who, True,
self.sheerka.new(BuiltinConcepts.USER_INPUT, body=source))
res = self.sheerka.execute(sub_context, to_parse, steps)
concept.compiled[part_key] = res
only_success = only_successful(sub_context, res)
concept.compiled[part_key] = only_success.body.body if is_only_successful(only_success) else res
sub_context.add_values(return_values=res)
for var_name, default_value in concept.metadata.variables:
@@ -106,7 +112,8 @@ class SheerkaEvaluateConcept:
to_parse = self.sheerka.ret(context.who, True,
self.sheerka.new(BuiltinConcepts.USER_INPUT, body=default_value))
res = self.sheerka.execute(context, to_parse, steps)
concept.compiled[var_name] = res
only_success = only_successful(sub_context, res)
concept.compiled[var_name] = only_success.body.body if is_only_successful(only_success) else res
sub_context.add_values(return_values=res)
# Updates the cache of concepts when possible
@@ -114,6 +121,7 @@ class SheerkaEvaluateConcept:
self.sheerka.get_by_id(concept.id).compiled = concept.compiled
def resolve(self, context, to_resolve, current_prop, current_concept, force_evaluation):
if isinstance(to_resolve, DoNotResolve):
return to_resolve.value