Refactored services to inherit from BaseService
This commit is contained in:
+3
-115
@@ -7,19 +7,10 @@ from cache.CacheManager import CacheManager
|
|||||||
from cache.DictionaryCache import DictionaryCache
|
from cache.DictionaryCache import DictionaryCache
|
||||||
from cache.IncCache import IncCache
|
from cache.IncCache import IncCache
|
||||||
from cache.ListIfNeededCache import ListIfNeededCache
|
from cache.ListIfNeededCache import ListIfNeededCache
|
||||||
from cache.SetCache import SetCache
|
|
||||||
from core.builtin_concepts import BuiltinConcepts, ErrorConcept, ReturnValueConcept, BuiltinErrors, BuiltinUnique, \
|
from core.builtin_concepts import BuiltinConcepts, ErrorConcept, ReturnValueConcept, BuiltinErrors, BuiltinUnique, \
|
||||||
UnknownConcept
|
UnknownConcept
|
||||||
from core.concept import Concept, ConceptParts, PROPERTIES_FOR_NEW
|
from core.concept import Concept, ConceptParts, PROPERTIES_FOR_NEW
|
||||||
from core.sheerka.ExecutionContext import ExecutionContext
|
from core.sheerka.ExecutionContext import ExecutionContext
|
||||||
from core.sheerka.services.SheerkaCreateNewConcept import SheerkaCreateNewConcept
|
|
||||||
from core.sheerka.services.SheerkaDump import SheerkaDump
|
|
||||||
from core.sheerka.services.SheerkaEvaluateConcept import SheerkaEvaluateConcept
|
|
||||||
from core.sheerka.services.SheerkaExecute import SheerkaExecute
|
|
||||||
from core.sheerka.services.SheerkaHistoryManager import SheerkaHistoryManager
|
|
||||||
from core.sheerka.services.SheerkaModifyConcept import SheerkaModifyConcept
|
|
||||||
from core.sheerka.services.SheerkaSetsManager import SheerkaSetsManager
|
|
||||||
from core.sheerka.services.SheerkaVariableManager import SheerkaVariableManager
|
|
||||||
from core.sheerka_logger import console_handler
|
from core.sheerka_logger import console_handler
|
||||||
from printer.SheerkaPrinter import SheerkaPrinter
|
from printer.SheerkaPrinter import SheerkaPrinter
|
||||||
from sdp.sheerkaDataProvider import SheerkaDataProvider, Event
|
from sdp.sheerkaDataProvider import SheerkaDataProvider, Event
|
||||||
@@ -44,9 +35,6 @@ class Sheerka(Concept):
|
|||||||
RESOLVED_CONCEPTS_SYA_DEFINITION_ENTRY = "Resolved_Concepts_Sya_Definitions"
|
RESOLVED_CONCEPTS_SYA_DEFINITION_ENTRY = "Resolved_Concepts_Sya_Definitions"
|
||||||
CONCEPTS_GRAMMARS_ENTRY = "Concepts_Grammars"
|
CONCEPTS_GRAMMARS_ENTRY = "Concepts_Grammars"
|
||||||
|
|
||||||
CONCEPTS_GROUPS_ENTRY = "Concepts_Groups"
|
|
||||||
VARIABLES_ENTRY = "Variables" # entry for admin or internal variables
|
|
||||||
|
|
||||||
CONCEPTS_KEYS_ENTRY = "Concepts_Keys"
|
CONCEPTS_KEYS_ENTRY = "Concepts_Keys"
|
||||||
BUILTIN_CONCEPTS_KEYS = "Builtins_Concepts" # sequential key for builtin concepts
|
BUILTIN_CONCEPTS_KEYS = "Builtins_Concepts" # sequential key for builtin concepts
|
||||||
USER_CONCEPTS_KEYS = "User_Concepts" # sequential key for user defined concepts
|
USER_CONCEPTS_KEYS = "User_Concepts" # sequential key for user defined concepts
|
||||||
@@ -81,15 +69,7 @@ class Sheerka(Concept):
|
|||||||
self.evaluators_prefix: str = None
|
self.evaluators_prefix: str = None
|
||||||
self.parsers_prefix: str = None
|
self.parsers_prefix: str = None
|
||||||
|
|
||||||
self.execute_handler = SheerkaExecute(self)
|
|
||||||
self.create_new_concept_handler = SheerkaCreateNewConcept(self)
|
|
||||||
self.modify_concept_handler = SheerkaModifyConcept(self)
|
|
||||||
self.dump_handler = SheerkaDump(self)
|
|
||||||
self.sets_handler = SheerkaSetsManager(self)
|
|
||||||
self.evaluate_concept_handler = SheerkaEvaluateConcept(self)
|
|
||||||
self.history_handler = SheerkaHistoryManager(self)
|
|
||||||
self.printer_handler = SheerkaPrinter(self)
|
self.printer_handler = SheerkaPrinter(self)
|
||||||
self.variable_handler = SheerkaVariableManager(self)
|
|
||||||
|
|
||||||
self.during_restore = False
|
self.during_restore = False
|
||||||
self._builtins_classes_cache = None
|
self._builtins_classes_cache = None
|
||||||
@@ -148,6 +128,7 @@ class Sheerka(Concept):
|
|||||||
|
|
||||||
self.sdp = SheerkaDataProvider(root_folder, self)
|
self.sdp = SheerkaDataProvider(root_folder, self)
|
||||||
self.initialize_caching()
|
self.initialize_caching()
|
||||||
|
self.initialize_services()
|
||||||
|
|
||||||
event = Event("Initializing Sheerka.", user_id=self.name)
|
event = Event("Initializing Sheerka.", user_id=self.name)
|
||||||
self.sdp.save_event(event)
|
self.sdp.save_event(event)
|
||||||
@@ -155,7 +136,6 @@ class Sheerka(Concept):
|
|||||||
if self.sdp.first_time:
|
if self.sdp.first_time:
|
||||||
self.first_time_initialisation(exec_context)
|
self.first_time_initialisation(exec_context)
|
||||||
|
|
||||||
self.initialize_services()
|
|
||||||
self.initialize_builtin_parsers()
|
self.initialize_builtin_parsers()
|
||||||
self.initialize_builtin_evaluators()
|
self.initialize_builtin_evaluators()
|
||||||
self.initialize_builtin_concepts()
|
self.initialize_builtin_concepts()
|
||||||
@@ -209,12 +189,6 @@ class Sheerka(Concept):
|
|||||||
self.cache_manager.register_cache(self.CONCEPTS_SYA_DEFINITION_ENTRY, cache)
|
self.cache_manager.register_cache(self.CONCEPTS_SYA_DEFINITION_ENTRY, cache)
|
||||||
self.cache_manager.get(self.CONCEPTS_SYA_DEFINITION_ENTRY, None) # to init from sdp
|
self.cache_manager.get(self.CONCEPTS_SYA_DEFINITION_ENTRY, None) # to init from sdp
|
||||||
|
|
||||||
cache = SetCache(default=lambda k: self.sdp.get(self.CONCEPTS_GROUPS_ENTRY, k))
|
|
||||||
self.cache_manager.register_cache(self.CONCEPTS_GROUPS_ENTRY, cache)
|
|
||||||
|
|
||||||
cache = Cache(default=lambda k: self.sdp.get(self.VARIABLES_ENTRY, k))
|
|
||||||
self.cache_manager.register_cache(self.VARIABLES_ENTRY, cache, True, True)
|
|
||||||
|
|
||||||
cache = DictionaryCache()
|
cache = DictionaryCache()
|
||||||
self.cache_manager.register_cache(self.RESOLVED_CONCEPTS_BY_FIRST_KEYWORD_ENTRY, cache, persist=False)
|
self.cache_manager.register_cache(self.RESOLVED_CONCEPTS_BY_FIRST_KEYWORD_ENTRY, cache, persist=False)
|
||||||
|
|
||||||
@@ -227,7 +201,7 @@ class Sheerka(Concept):
|
|||||||
def first_time_initialisation(self, context):
|
def first_time_initialisation(self, context):
|
||||||
|
|
||||||
self.cache_manager.put(self.CONCEPTS_KEYS_ENTRY, self.USER_CONCEPTS_KEYS, 1000)
|
self.cache_manager.put(self.CONCEPTS_KEYS_ENTRY, self.USER_CONCEPTS_KEYS, 1000)
|
||||||
self.variable_handler.record(context, self.name, "save_execution_context", True)
|
self.record(context, self.name, "save_execution_context", True)
|
||||||
|
|
||||||
def initialize_services(self):
|
def initialize_services(self):
|
||||||
"""
|
"""
|
||||||
@@ -375,7 +349,7 @@ class Sheerka(Concept):
|
|||||||
if self.cache_manager.is_dirty:
|
if self.cache_manager.is_dirty:
|
||||||
self.cache_manager.commit(execution_context)
|
self.cache_manager.commit(execution_context)
|
||||||
|
|
||||||
if self.save_execution_context and self.variable_handler.load(self.name, "save_execution_context"):
|
if self.save_execution_context and self.load(self.name, "save_execution_context"):
|
||||||
self.sdp.save_result(execution_context)
|
self.sdp.save_result(execution_context)
|
||||||
|
|
||||||
# # hack to save valid concept definition
|
# # hack to save valid concept definition
|
||||||
@@ -396,25 +370,6 @@ class Sheerka(Concept):
|
|||||||
"""
|
"""
|
||||||
self.printer_handler.print(result, instructions)
|
self.printer_handler.print(result, instructions)
|
||||||
|
|
||||||
def record(self, context, who, key, value):
|
|
||||||
return self.variable_handler.record(context, who, key, value)
|
|
||||||
|
|
||||||
def load(self, who, key):
|
|
||||||
return self.variable_handler.load(who, key)
|
|
||||||
|
|
||||||
def delete(self, context, who, key):
|
|
||||||
return self.variable_handler.delete(context, who, key)
|
|
||||||
|
|
||||||
def execute(self, execution_context, return_values, execution_steps):
|
|
||||||
"""
|
|
||||||
Executes process for all initial contexts
|
|
||||||
:param execution_context:
|
|
||||||
:param return_values:
|
|
||||||
:param execution_steps:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
return self.execute_handler.execute(execution_context, return_values, execution_steps)
|
|
||||||
|
|
||||||
def set_id_if_needed(self, obj: Concept, is_builtin: bool):
|
def set_id_if_needed(self, obj: Concept, is_builtin: bool):
|
||||||
"""
|
"""
|
||||||
Set the key for the concept if needed
|
Set the key for the concept if needed
|
||||||
@@ -430,39 +385,6 @@ class Sheerka(Concept):
|
|||||||
obj.metadata.id = str(self.cache_manager.get(self.CONCEPTS_KEYS_ENTRY, key))
|
obj.metadata.id = str(self.cache_manager.get(self.CONCEPTS_KEYS_ENTRY, key))
|
||||||
self.log.debug(f"Setting id '{obj.metadata.id}' to concept '{obj.metadata.name}'.")
|
self.log.debug(f"Setting id '{obj.metadata.id}' to concept '{obj.metadata.name}'.")
|
||||||
|
|
||||||
def create_new_concept(self, context, concept: Concept):
|
|
||||||
"""
|
|
||||||
Adds a new concept to the system
|
|
||||||
:param context:
|
|
||||||
:param concept: DefConceptNode
|
|
||||||
:return: digest of the new concept
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self.create_new_concept_handler.create_new_concept(context, concept)
|
|
||||||
|
|
||||||
def modify_concept(self, context, concept: Concept):
|
|
||||||
return self.modify_concept_handler.modify_concept(context, concept)
|
|
||||||
|
|
||||||
def add_concept_to_set(self, context, concept, concept_set):
|
|
||||||
"""
|
|
||||||
Add an entry in sdp to tell that concept isa concept_set
|
|
||||||
:param context:
|
|
||||||
:param concept:
|
|
||||||
:param concept_set:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
return self.sets_handler.add_concept_to_set(context, concept, concept_set)
|
|
||||||
|
|
||||||
def set_isa(self, context, concept, concept_set):
|
|
||||||
"""
|
|
||||||
|
|
||||||
:param context:
|
|
||||||
:param concept:
|
|
||||||
:param concept_set:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
return self.sets_handler.set_isa(context, concept, concept_set)
|
|
||||||
|
|
||||||
def force_sya_def(self, context, list_of_def):
|
def force_sya_def(self, context, list_of_def):
|
||||||
"""
|
"""
|
||||||
Set the precedence and/or the associativity of a concept
|
Set the precedence and/or the associativity of a concept
|
||||||
@@ -497,27 +419,6 @@ class Sheerka(Concept):
|
|||||||
|
|
||||||
return self.ret(self.name, True, self.new(BuiltinConcepts.SUCCESS))
|
return self.ret(self.name, True, self.new(BuiltinConcepts.SUCCESS))
|
||||||
|
|
||||||
def get_set_elements(self, context, concept):
|
|
||||||
"""
|
|
||||||
Concept is supposed to be a set
|
|
||||||
Returns all elements if the set
|
|
||||||
:param context:
|
|
||||||
:param concept:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self.sets_handler.get_set_elements(context, concept)
|
|
||||||
|
|
||||||
def evaluate_concept(self, context, concept: Concept):
|
|
||||||
"""
|
|
||||||
Evaluation a concept
|
|
||||||
It means that if the where clause is True, will evaluate the body
|
|
||||||
:param context:
|
|
||||||
:param concept:
|
|
||||||
:return: value of the evaluation or error
|
|
||||||
"""
|
|
||||||
return self.evaluate_concept_handler.evaluate_concept(context, concept)
|
|
||||||
|
|
||||||
def add_in_cache(self, concept: Concept):
|
def add_in_cache(self, concept: Concept):
|
||||||
"""
|
"""
|
||||||
Adds a concept template in cache.
|
Adds a concept template in cache.
|
||||||
@@ -788,15 +689,6 @@ class Sheerka(Concept):
|
|||||||
|
|
||||||
return a.key == b_key
|
return a.key == b_key
|
||||||
|
|
||||||
def isinset(self, a, b):
|
|
||||||
return self.sets_handler.isinset(a, b)
|
|
||||||
|
|
||||||
def isa(self, a, b):
|
|
||||||
return self.sets_handler.isa(a, b)
|
|
||||||
|
|
||||||
def isaset(self, context, concept):
|
|
||||||
return self.sets_handler.isaset(context, concept)
|
|
||||||
|
|
||||||
def get_evaluator_name(self, name):
|
def get_evaluator_name(self, name):
|
||||||
if self.evaluators_prefix is None:
|
if self.evaluators_prefix is None:
|
||||||
base_evaluator_class = core.utils.get_class("evaluators.BaseEvaluator.BaseEvaluator")
|
base_evaluator_class = core.utils.get_class("evaluators.BaseEvaluator.BaseEvaluator")
|
||||||
@@ -826,10 +718,6 @@ class Sheerka(Concept):
|
|||||||
|
|
||||||
return sorted(res, key=lambda i: int(i.id))
|
return sorted(res, key=lambda i: int(i.id))
|
||||||
|
|
||||||
def history(self, page=10, start=0):
|
|
||||||
"""Gets the history of all commands"""
|
|
||||||
return self.history_handler.history(page, start)
|
|
||||||
|
|
||||||
def restore(self):
|
def restore(self):
|
||||||
"""
|
"""
|
||||||
Restore the state with all previous valid concept definitions
|
Restore the state with all previous valid concept definitions
|
||||||
|
|||||||
@@ -1,22 +1,27 @@
|
|||||||
import core.utils
|
import core.utils
|
||||||
from core.builtin_concepts import BuiltinConcepts, ErrorConcept
|
from core.builtin_concepts import BuiltinConcepts, ErrorConcept
|
||||||
from core.concept import Concept
|
from core.concept import Concept
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
from sdp.sheerkaDataProvider import SheerkaDataProviderDuplicateKeyError
|
from sdp.sheerkaDataProvider import SheerkaDataProviderDuplicateKeyError
|
||||||
|
|
||||||
BNF_NODE_PARSER_CLASS = "parsers.BnfNodeParser_Old.BnfNodeParser"
|
BNF_NODE_PARSER_CLASS = "parsers.BnfNodeParser_Old.BnfNodeParser"
|
||||||
BASE_NODE_PARSER_CLASS = "parsers.BaseNodeParser.BaseNodeParser"
|
BASE_NODE_PARSER_CLASS = "parsers.BaseNodeParser.BaseNodeParser"
|
||||||
|
|
||||||
|
|
||||||
class SheerkaCreateNewConcept:
|
class SheerkaCreateNewConcept(BaseService):
|
||||||
"""
|
"""
|
||||||
Manage the creation of a new concept
|
Manage the creation of a new concept
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
NAME = "CreateNewConcept"
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
self.logger_name = "CreateNewConcept"
|
|
||||||
self.bnp = core.utils.get_class(BASE_NODE_PARSER_CLASS) # BaseNodeParser
|
self.bnp = core.utils.get_class(BASE_NODE_PARSER_CLASS) # BaseNodeParser
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaCreateNewConcept.create_new_concept)
|
||||||
|
|
||||||
def create_new_concept(self, context, concept: Concept):
|
def create_new_concept(self, context, concept: Concept):
|
||||||
"""
|
"""
|
||||||
Adds a new concept to the system
|
Adds a new concept to the system
|
||||||
@@ -36,7 +41,7 @@ class SheerkaCreateNewConcept:
|
|||||||
error = SheerkaDataProviderDuplicateKeyError(sheerka.CONCEPTS_BY_KEY_ENTRY + "." + concept.key,
|
error = SheerkaDataProviderDuplicateKeyError(sheerka.CONCEPTS_BY_KEY_ENTRY + "." + concept.key,
|
||||||
concept)
|
concept)
|
||||||
return sheerka.ret(
|
return sheerka.ret(
|
||||||
self.logger_name,
|
self.NAME,
|
||||||
False,
|
False,
|
||||||
sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_DEFINED, body=concept),
|
sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_DEFINED, body=concept),
|
||||||
error.args[0])
|
error.args[0])
|
||||||
@@ -47,13 +52,13 @@ class SheerkaCreateNewConcept:
|
|||||||
# update the dictionary of concepts by first key
|
# update the dictionary of concepts by first key
|
||||||
init_ret_value = self.bnp.get_concepts_by_first_keyword(context, [concept], True)
|
init_ret_value = self.bnp.get_concepts_by_first_keyword(context, [concept], True)
|
||||||
if not init_ret_value.status:
|
if not init_ret_value.status:
|
||||||
return sheerka.ret(self.logger_name, False, ErrorConcept(init_ret_value.value))
|
return sheerka.ret(self.NAME, False, ErrorConcept(init_ret_value.value))
|
||||||
concepts_by_first_keyword = init_ret_value.body
|
concepts_by_first_keyword = init_ret_value.body
|
||||||
|
|
||||||
# update resolved dictionary
|
# update resolved dictionary
|
||||||
init_ret_value = self.bnp.resolve_concepts_by_first_keyword(context, concepts_by_first_keyword)
|
init_ret_value = self.bnp.resolve_concepts_by_first_keyword(context, concepts_by_first_keyword)
|
||||||
if not init_ret_value.status:
|
if not init_ret_value.status:
|
||||||
return sheerka.ret(self.logger_name, False, ErrorConcept(init_ret_value.value))
|
return sheerka.ret(self.NAME, False, ErrorConcept(init_ret_value.value))
|
||||||
resolved_concepts_by_first_keyword = init_ret_value.body
|
resolved_concepts_by_first_keyword = init_ret_value.body
|
||||||
|
|
||||||
concept.freeze_definition_hash()
|
concept.freeze_definition_hash()
|
||||||
@@ -66,5 +71,5 @@ class SheerkaCreateNewConcept:
|
|||||||
sheerka.cache_manager.clear(sheerka.CONCEPTS_GRAMMARS_ENTRY)
|
sheerka.cache_manager.clear(sheerka.CONCEPTS_GRAMMARS_ENTRY)
|
||||||
|
|
||||||
# process the return if needed
|
# process the return if needed
|
||||||
ret = sheerka.ret(self.logger_name, True, sheerka.new(BuiltinConcepts.NEW_CONCEPT, body=concept))
|
ret = sheerka.ret(self.NAME, True, sheerka.new(BuiltinConcepts.NEW_CONCEPT, body=concept))
|
||||||
return ret
|
return ret
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import pprint
|
|||||||
from core.builtin_concepts import BuiltinConcepts
|
from core.builtin_concepts import BuiltinConcepts
|
||||||
from core.concept import Concept
|
from core.concept import Concept
|
||||||
from core.sheerka.ExecutionContext import ExecutionContext
|
from core.sheerka.ExecutionContext import ExecutionContext
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
from sdp.sheerkaDataProvider import SheerkaDataProvider, Event
|
from sdp.sheerkaDataProvider import SheerkaDataProvider, Event
|
||||||
|
|
||||||
|
|
||||||
@@ -13,9 +14,17 @@ def get_pp():
|
|||||||
return pp
|
return pp
|
||||||
|
|
||||||
|
|
||||||
class SheerkaDump:
|
class SheerkaDump(BaseService):
|
||||||
|
|
||||||
|
NAME = "Dump"
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaDump.dump_concepts, "concepts")
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaDump.dump_desc, "desc")
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaDump.dump_state, "state")
|
||||||
|
|
||||||
def dump_concepts(self):
|
def dump_concepts(self):
|
||||||
lst = self.sheerka.sdp.list(self.sheerka.CONCEPTS_BY_ID_ENTRY)
|
lst = self.sheerka.sdp.list(self.sheerka.CONCEPTS_BY_ID_ENTRY)
|
||||||
@@ -69,28 +78,28 @@ class SheerkaDump:
|
|||||||
|
|
||||||
first = False
|
first = False
|
||||||
|
|
||||||
def dump_history(self, page=20, start=0):
|
# def dump_history(self, page=20, start=0):
|
||||||
count = 0
|
# count = 0
|
||||||
resolved_page = page if page > 0 else 50
|
# resolved_page = page if page > 0 else 50
|
||||||
page_count = 0
|
# page_count = 0
|
||||||
|
#
|
||||||
while count < page if page > 0 else True:
|
# while count < page if page > 0 else True:
|
||||||
history = self.sheerka.history(resolved_page, start + page_count * resolved_page)
|
# history = self.sheerka.history(resolved_page, start + page_count * resolved_page)
|
||||||
try:
|
# try:
|
||||||
h = next(history)
|
# h = next(history)
|
||||||
except StopIteration:
|
# except StopIteration:
|
||||||
break
|
# break
|
||||||
|
#
|
||||||
while True:
|
# while True:
|
||||||
try:
|
# try:
|
||||||
if h.result:
|
# if h.result:
|
||||||
self.sheerka.log.info(h)
|
# self.sheerka.log.info(h)
|
||||||
count += 1
|
# count += 1
|
||||||
h = next(history)
|
# h = next(history)
|
||||||
except StopIteration:
|
# except StopIteration:
|
||||||
break
|
# break
|
||||||
|
#
|
||||||
page_count += 1
|
# page_count += 1
|
||||||
|
|
||||||
def dump_state(self):
|
def dump_state(self):
|
||||||
snapshot = self.sheerka.sdp.get_snapshot(SheerkaDataProvider.HeadFile)
|
snapshot = self.sheerka.sdp.get_snapshot(SheerkaDataProvider.HeadFile)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from core.builtin_concepts import BuiltinConcepts
|
from core.builtin_concepts import BuiltinConcepts
|
||||||
from core.builtin_helpers import expect_one, only_successful
|
from core.builtin_helpers import expect_one, only_successful
|
||||||
from core.concept import Concept, DoNotResolve, ConceptParts, InfiniteRecursionResolved
|
from core.concept import Concept, DoNotResolve, ConceptParts, InfiniteRecursionResolved
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
|
|
||||||
CONCEPT_EVALUATION_STEPS = [
|
CONCEPT_EVALUATION_STEPS = [
|
||||||
BuiltinConcepts.BEFORE_EVALUATION,
|
BuiltinConcepts.BEFORE_EVALUATION,
|
||||||
@@ -8,10 +9,14 @@ CONCEPT_EVALUATION_STEPS = [
|
|||||||
BuiltinConcepts.AFTER_EVALUATION]
|
BuiltinConcepts.AFTER_EVALUATION]
|
||||||
|
|
||||||
|
|
||||||
class SheerkaEvaluateConcept:
|
class SheerkaEvaluateConcept(BaseService):
|
||||||
|
NAME = "EvaluateConcept"
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
self.logger_name = "EvaluateConcept"
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaEvaluateConcept.evaluate_concept)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def infinite_recursion_detected(context, concept):
|
def infinite_recursion_detected(context, concept):
|
||||||
@@ -51,14 +56,14 @@ class SheerkaEvaluateConcept:
|
|||||||
if parent.who == context.who and parent.desc == context.desc:
|
if parent.who == context.who and parent.desc == context.desc:
|
||||||
body = parent.obj.metadata.body
|
body = parent.obj.metadata.body
|
||||||
try:
|
try:
|
||||||
return self.sheerka.ret(self.logger_name, True, InfiniteRecursionResolved(eval(body)))
|
return self.sheerka.ret(self.NAME, True, InfiniteRecursionResolved(eval(body)))
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
concepts_found.add(parent.obj)
|
concepts_found.add(parent.obj)
|
||||||
parent = parent.get_parent()
|
parent = parent.get_parent()
|
||||||
|
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name,
|
self.NAME,
|
||||||
False,
|
False,
|
||||||
self.sheerka.new(BuiltinConcepts.CHICKEN_AND_EGG, body=concepts_found))
|
self.sheerka.new(BuiltinConcepts.CHICKEN_AND_EGG, body=concepts_found))
|
||||||
|
|
||||||
@@ -71,6 +76,7 @@ class SheerkaEvaluateConcept:
|
|||||||
:param logger:
|
:param logger:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def is_only_successful(r):
|
def is_only_successful(r):
|
||||||
# return False
|
# return False
|
||||||
return context.sheerka.isinstance(r, BuiltinConcepts.RETURN_VALUE) and \
|
return context.sheerka.isinstance(r, BuiltinConcepts.RETURN_VALUE) and \
|
||||||
@@ -134,7 +140,7 @@ class SheerkaEvaluateConcept:
|
|||||||
return ret_val.body
|
return ret_val.body
|
||||||
|
|
||||||
desc = f"Evaluating {current_prop} (concept={current_concept})"
|
desc = f"Evaluating {current_prop} (concept={current_concept})"
|
||||||
context.log(desc, self.logger_name)
|
context.log(desc, self.NAME)
|
||||||
with context.push(desc=desc, obj=current_concept) as sub_context:
|
with context.push(desc=desc, obj=current_concept) as sub_context:
|
||||||
|
|
||||||
if force_evaluation:
|
if force_evaluation:
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
import core.utils
|
import core.utils
|
||||||
from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept
|
from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
|
|
||||||
NO_MATCH = "** No Match **"
|
NO_MATCH = "** No Match **"
|
||||||
|
|
||||||
|
|
||||||
class SheerkaExecute:
|
class SheerkaExecute(BaseService):
|
||||||
"""
|
"""
|
||||||
Manage the execution of a process flow
|
Manage the execution of a process flow
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
NAME = "Execute"
|
||||||
self.sheerka = sheerka
|
|
||||||
|
|
||||||
def call_parsers(self, execution_context, return_values):
|
def __init__(self, sheerka):
|
||||||
|
super().__init__(sheerka)
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaExecute.execute)
|
||||||
|
|
||||||
|
def call_parsers(self, context, return_values):
|
||||||
|
|
||||||
# return_values must be a list
|
# return_values must be a list
|
||||||
if not isinstance(return_values, list):
|
if not isinstance(return_values, list):
|
||||||
@@ -35,7 +41,7 @@ class SheerkaExecute:
|
|||||||
|
|
||||||
# group the parsers by priorities
|
# group the parsers by priorities
|
||||||
instantiated_parsers = [parser(sheerka=self.sheerka) for parser in self.sheerka.parsers.values()]
|
instantiated_parsers = [parser(sheerka=self.sheerka) for parser in self.sheerka.parsers.values()]
|
||||||
instantiated_parsers = self.preprocess(execution_context, instantiated_parsers)
|
instantiated_parsers = self.preprocess(context, instantiated_parsers)
|
||||||
|
|
||||||
grouped_parsers = {}
|
grouped_parsers = {}
|
||||||
for parser in [p for p in instantiated_parsers if p.enabled]:
|
for parser in [p for p in instantiated_parsers if p.enabled]:
|
||||||
@@ -57,9 +63,9 @@ class SheerkaExecute:
|
|||||||
# if self.sheerka.log.isEnabledFor(logging.DEBUG):
|
# if self.sheerka.log.isEnabledFor(logging.DEBUG):
|
||||||
# debug_text = "'" + to_parse + "'" if isinstance(to_parse, str) \
|
# debug_text = "'" + to_parse + "'" if isinstance(to_parse, str) \
|
||||||
# else "'" + BaseParser.get_text_from_tokens(to_parse) + "' as tokens"
|
# else "'" + BaseParser.get_text_from_tokens(to_parse) + "' as tokens"
|
||||||
# execution_context.log(f"Parsing {debug_text}")
|
# context.log(f"Parsing {debug_text}")
|
||||||
|
|
||||||
with execution_context.push(desc=f"Parsing using {parser.name}",
|
with context.push(desc=f"Parsing using {parser.name}",
|
||||||
logger=parser.verbose_log) as sub_context:
|
logger=parser.verbose_log) as sub_context:
|
||||||
sub_context.add_inputs(to_parse=to_parse)
|
sub_context.add_inputs(to_parse=to_parse)
|
||||||
res = parser.parse(sub_context, to_parse)
|
res = parser.parse(sub_context, to_parse)
|
||||||
@@ -94,7 +100,7 @@ class SheerkaExecute:
|
|||||||
result = core.utils.remove_list_from_list(result, user_inputs)
|
result = core.utils.remove_list_from_list(result, user_inputs)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def call_evaluators(self, execution_context, return_values, process_step):
|
def call_evaluators(self, context, return_values, process_step):
|
||||||
|
|
||||||
# return_values must be a list
|
# return_values must be a list
|
||||||
if not isinstance(return_values, list):
|
if not isinstance(return_values, list):
|
||||||
@@ -106,7 +112,7 @@ class SheerkaExecute:
|
|||||||
instantiated_evaluators = [e_class() for e_class in self.sheerka.evaluators]
|
instantiated_evaluators = [e_class() for e_class in self.sheerka.evaluators]
|
||||||
|
|
||||||
# pre-process evaluators if needed
|
# pre-process evaluators if needed
|
||||||
instantiated_evaluators = self.preprocess(execution_context, instantiated_evaluators)
|
instantiated_evaluators = self.preprocess(context, instantiated_evaluators)
|
||||||
|
|
||||||
for evaluator in [e for e in instantiated_evaluators if e.enabled and process_step in e.steps]:
|
for evaluator in [e for e in instantiated_evaluators if e.enabled and process_step in e.steps]:
|
||||||
grouped_evaluators.setdefault(evaluator.priority, []).append(evaluator)
|
grouped_evaluators.setdefault(evaluator.priority, []).append(evaluator)
|
||||||
@@ -117,7 +123,7 @@ class SheerkaExecute:
|
|||||||
# process
|
# process
|
||||||
iteration = 0
|
iteration = 0
|
||||||
while True:
|
while True:
|
||||||
with execution_context.push(desc=f"iteration #{iteration}", iteration=iteration) as iteration_context:
|
with context.push(desc=f"iteration #{iteration}", iteration=iteration) as iteration_context:
|
||||||
simple_digest = return_values[:]
|
simple_digest = return_values[:]
|
||||||
iteration_context.add_inputs(return_values=simple_digest)
|
iteration_context.add_inputs(return_values=simple_digest)
|
||||||
|
|
||||||
@@ -127,7 +133,7 @@ class SheerkaExecute:
|
|||||||
evaluated_items = []
|
evaluated_items = []
|
||||||
to_delete = []
|
to_delete = []
|
||||||
for evaluator in grouped_evaluators[priority]:
|
for evaluator in grouped_evaluators[priority]:
|
||||||
evaluator = self.preprocess(execution_context, evaluator.__class__()) # fresh copy
|
evaluator = self.preprocess(context, evaluator.__class__()) # fresh copy
|
||||||
|
|
||||||
sub_context_desc = f"Evaluating using {evaluator.name} ({priority=})"
|
sub_context_desc = f"Evaluating using {evaluator.name} ({priority=})"
|
||||||
with iteration_context.push(desc=sub_context_desc, logger=evaluator.verbose_log) as sub_context:
|
with iteration_context.push(desc=sub_context_desc, logger=evaluator.verbose_log) as sub_context:
|
||||||
@@ -194,10 +200,10 @@ class SheerkaExecute:
|
|||||||
|
|
||||||
return return_values
|
return return_values
|
||||||
|
|
||||||
def execute(self, execution_context, return_values, execution_steps):
|
def execute(self, context, return_values, execution_steps):
|
||||||
"""
|
"""
|
||||||
Executes process for all initial contexts
|
Executes process for all initial contexts
|
||||||
:param execution_context:
|
:param context:
|
||||||
:param return_values:
|
:param return_values:
|
||||||
:param execution_steps:
|
:param execution_steps:
|
||||||
:return:
|
:return:
|
||||||
@@ -205,7 +211,7 @@ class SheerkaExecute:
|
|||||||
|
|
||||||
for step in execution_steps:
|
for step in execution_steps:
|
||||||
copy = return_values[:] if hasattr(return_values, "__iter__") else [return_values]
|
copy = return_values[:] if hasattr(return_values, "__iter__") else [return_values]
|
||||||
with execution_context.push(step=step, iteration=0, desc=f"{step=}") as sub_context:
|
with context.push(step=step, iteration=0, desc=f"{step=}") as sub_context:
|
||||||
|
|
||||||
if step == BuiltinConcepts.PARSING:
|
if step == BuiltinConcepts.PARSING:
|
||||||
return_values = self.call_parsers(sub_context, return_values)
|
return_values = self.call_parsers(sub_context, return_values)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
from sdp.sheerkaDataProvider import Event
|
from sdp.sheerkaDataProvider import Event
|
||||||
|
|
||||||
hist = namedtuple("HistoryTest", "text status") # tests purposes only
|
hist = namedtuple("HistoryTest", "text status") # tests purposes only
|
||||||
@@ -42,11 +43,16 @@ class History:
|
|||||||
return self._status
|
return self._status
|
||||||
|
|
||||||
|
|
||||||
class SheerkaHistoryManager:
|
class SheerkaHistoryManager(BaseService):
|
||||||
def __init__(self, sheerka):
|
NAME = "History"
|
||||||
self.sheerka = sheerka
|
|
||||||
|
|
||||||
def history(self, depth, start):
|
def __init__(self, sheerka):
|
||||||
|
super().__init__(sheerka)
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaHistoryManager.history)
|
||||||
|
|
||||||
|
def history(self, depth=10, start=0):
|
||||||
"""
|
"""
|
||||||
Load history
|
Load history
|
||||||
:param depth: number of items
|
:param depth: number of items
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
from core.builtin_concepts import BuiltinConcepts
|
from core.builtin_concepts import BuiltinConcepts
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
|
|
||||||
|
|
||||||
class SheerkaModifyConcept:
|
class SheerkaModifyConcept(BaseService):
|
||||||
|
NAME = "ModifyConcept"
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
self.logger_name = "ModifyConcept"
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaModifyConcept.modify_concept)
|
||||||
|
|
||||||
def modify_concept(self, context, concept):
|
def modify_concept(self, context, concept):
|
||||||
old_version = self.sheerka.get_by_id(concept.id)
|
old_version = self.sheerka.get_by_id(concept.id)
|
||||||
@@ -12,7 +17,7 @@ class SheerkaModifyConcept:
|
|||||||
if old_version is None:
|
if old_version is None:
|
||||||
# nothing found in cache
|
# nothing found in cache
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name, False,
|
self.NAME, False,
|
||||||
self.sheerka.new(
|
self.sheerka.new(
|
||||||
BuiltinConcepts.UNKNOWN_CONCEPT,
|
BuiltinConcepts.UNKNOWN_CONCEPT,
|
||||||
body=[("key", concept.key), ("id", concept.id)]))
|
body=[("key", concept.key), ("id", concept.id)]))
|
||||||
@@ -20,13 +25,13 @@ class SheerkaModifyConcept:
|
|||||||
if not self.sheerka.is_success(old_version) and concept.key != old_version.key:
|
if not self.sheerka.is_success(old_version) and concept.key != old_version.key:
|
||||||
# an error concept is returned
|
# an error concept is returned
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name, False,
|
self.NAME, False,
|
||||||
old_version)
|
old_version)
|
||||||
|
|
||||||
if old_version == concept:
|
if old_version == concept:
|
||||||
# the concept is not modified
|
# the concept is not modified
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name, False,
|
self.NAME, False,
|
||||||
self.sheerka.new(
|
self.sheerka.new(
|
||||||
BuiltinConcepts.CONCEPT_ALREADY_DEFINED,
|
BuiltinConcepts.CONCEPT_ALREADY_DEFINED,
|
||||||
body=concept))
|
body=concept))
|
||||||
@@ -37,5 +42,5 @@ class SheerkaModifyConcept:
|
|||||||
# TODO : update resolved by first keyword
|
# TODO : update resolved by first keyword
|
||||||
# TODO : update concepts grammars
|
# TODO : update concepts grammars
|
||||||
|
|
||||||
ret = self.sheerka.ret(self.logger_name, True, self.sheerka.new(BuiltinConcepts.NEW_CONCEPT, body=concept))
|
ret = self.sheerka.ret(self.NAME, True, self.sheerka.new(BuiltinConcepts.NEW_CONCEPT, body=concept))
|
||||||
return ret
|
return ret
|
||||||
|
|||||||
@@ -1,15 +1,30 @@
|
|||||||
import core.builtin_helpers
|
import core.builtin_helpers
|
||||||
|
from cache.SetCache import SetCache
|
||||||
from core.ast.nodes import python_to_concept
|
from core.ast.nodes import python_to_concept
|
||||||
from core.builtin_concepts import BuiltinConcepts
|
from core.builtin_concepts import BuiltinConcepts
|
||||||
from core.concept import Concept, ConceptParts
|
from core.concept import Concept, ConceptParts
|
||||||
|
from core.sheerka.services.sheerka_service import BaseService
|
||||||
|
|
||||||
GROUP_PREFIX = 'All_'
|
GROUP_PREFIX = 'All_'
|
||||||
|
|
||||||
|
|
||||||
class SheerkaSetsManager:
|
class SheerkaSetsManager(BaseService):
|
||||||
|
NAME = "SetsManager"
|
||||||
|
CONCEPTS_GROUPS_ENTRY = "Concepts_Groups"
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
self.logger_name = "SetsManager"
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.set_isa)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.get_set_elements)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.add_concept_to_set)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.isinset)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.isa)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaSetsManager.isaset)
|
||||||
|
|
||||||
|
cache = SetCache(default=lambda k: self.sheerka.sdp.get(self.CONCEPTS_GROUPS_ENTRY, k))
|
||||||
|
self.sheerka.cache_manager.register_cache(self.CONCEPTS_GROUPS_ENTRY, cache)
|
||||||
|
|
||||||
def set_isa(self, context, concept, concept_set):
|
def set_isa(self, context, concept, concept_set):
|
||||||
"""
|
"""
|
||||||
@@ -20,11 +35,11 @@ class SheerkaSetsManager:
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
context.log(f"Setting concept {concept} is a {concept_set}", who=self.logger_name)
|
context.log(f"Setting concept {concept} is a {concept_set}", who=self.NAME)
|
||||||
|
|
||||||
if BuiltinConcepts.ISA in concept.metadata.props and concept_set in concept.metadata.props[BuiltinConcepts.ISA]:
|
if BuiltinConcepts.ISA in concept.metadata.props and concept_set in concept.metadata.props[BuiltinConcepts.ISA]:
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name,
|
self.NAME,
|
||||||
False,
|
False,
|
||||||
self.sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_IN_SET, body=concept, concept_set=concept_set))
|
self.sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_IN_SET, body=concept, concept_set=concept_set))
|
||||||
|
|
||||||
@@ -45,25 +60,25 @@ class SheerkaSetsManager:
|
|||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
context.log(f"Adding concept {concept} to set {concept_set}", who=self.logger_name)
|
context.log(f"Adding concept {concept} to set {concept_set}", who=self.NAME)
|
||||||
|
|
||||||
assert concept.id
|
assert concept.id
|
||||||
assert concept_set.id
|
assert concept_set.id
|
||||||
|
|
||||||
set_elements = self.sheerka.cache_manager.get(self.sheerka.CONCEPTS_GROUPS_ENTRY, concept_set.id)
|
set_elements = self.sheerka.cache_manager.get(self.CONCEPTS_GROUPS_ENTRY, concept_set.id)
|
||||||
if set_elements and concept.id in set_elements:
|
if set_elements and concept.id in set_elements:
|
||||||
return self.sheerka.ret(
|
return self.sheerka.ret(
|
||||||
self.logger_name,
|
self.NAME,
|
||||||
False,
|
False,
|
||||||
self.sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_IN_SET, body=concept, concept_set=concept_set))
|
self.sheerka.new(BuiltinConcepts.CONCEPT_ALREADY_IN_SET, body=concept, concept_set=concept_set))
|
||||||
|
|
||||||
self.sheerka.cache_manager.put(self.sheerka.CONCEPTS_GROUPS_ENTRY, concept_set.id, concept.id)
|
self.sheerka.cache_manager.put(self.CONCEPTS_GROUPS_ENTRY, concept_set.id, concept.id)
|
||||||
return self.sheerka.ret(self.logger_name, True, self.sheerka.new(BuiltinConcepts.SUCCESS))
|
return self.sheerka.ret(self.NAME, True, self.sheerka.new(BuiltinConcepts.SUCCESS))
|
||||||
|
|
||||||
def add_concepts_to_set(self, context, concepts, concept_set):
|
def add_concepts_to_set(self, context, concepts, concept_set):
|
||||||
"""Adding multiple concepts at the same time"""
|
"""Adding multiple concepts at the same time"""
|
||||||
|
|
||||||
context.log(f"Adding concepts {concepts} to set {concept_set}", who=self.logger_name)
|
context.log(f"Adding concepts {concepts} to set {concept_set}", who=self.NAME)
|
||||||
already_in_set = []
|
already_in_set = []
|
||||||
for concept in concepts:
|
for concept in concepts:
|
||||||
res = self.add_concept_to_set(context, concept, concept_set)
|
res = self.add_concept_to_set(context, concept, concept_set)
|
||||||
@@ -77,7 +92,7 @@ class SheerkaSetsManager:
|
|||||||
else:
|
else:
|
||||||
body = self.sheerka.new(BuiltinConcepts.SUCCESS)
|
body = self.sheerka.new(BuiltinConcepts.SUCCESS)
|
||||||
|
|
||||||
return self.sheerka.ret(self.logger_name, len(already_in_set) != len(concepts), body)
|
return self.sheerka.ret(self.NAME, len(already_in_set) != len(concepts), body)
|
||||||
|
|
||||||
def get_set_elements(self, context, concept):
|
def get_set_elements(self, context, concept):
|
||||||
"""
|
"""
|
||||||
@@ -93,7 +108,7 @@ class SheerkaSetsManager:
|
|||||||
return self.sheerka.new(BuiltinConcepts.NOT_A_SET, body=concept)
|
return self.sheerka.new(BuiltinConcepts.NOT_A_SET, body=concept)
|
||||||
|
|
||||||
# first, try to see if sub_context has it's own group entry
|
# first, try to see if sub_context has it's own group entry
|
||||||
ids = self.sheerka.cache_manager.get(self.sheerka.CONCEPTS_GROUPS_ENTRY, sub_concept.id)
|
ids = self.sheerka.cache_manager.get(self.CONCEPTS_GROUPS_ENTRY, sub_concept.id)
|
||||||
concepts = self._get_concepts(context, ids, True)
|
concepts = self._get_concepts(context, ids, True)
|
||||||
|
|
||||||
# aggregate with en entries from its body
|
# aggregate with en entries from its body
|
||||||
@@ -143,7 +158,7 @@ class SheerkaSetsManager:
|
|||||||
if not (a.id and b.id):
|
if not (a.id and b.id):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
group_elements = self.sheerka.cache_manager.get(self.sheerka.CONCEPTS_GROUPS_ENTRY, b.id)
|
group_elements = self.sheerka.cache_manager.get(self.CONCEPTS_GROUPS_ENTRY, b.id)
|
||||||
return group_elements and a.id in group_elements
|
return group_elements and a.id in group_elements
|
||||||
|
|
||||||
def isa(self, a, b):
|
def isa(self, a, b):
|
||||||
@@ -173,7 +188,7 @@ class SheerkaSetsManager:
|
|||||||
|
|
||||||
# check if it has a group
|
# check if it has a group
|
||||||
# TODO: use cache instead of directly requesting sdp
|
# TODO: use cache instead of directly requesting sdp
|
||||||
if self.sheerka.cache_manager.get(self.sheerka.CONCEPTS_GROUPS_ENTRY, concept.id):
|
if self.sheerka.cache_manager.get(self.CONCEPTS_GROUPS_ENTRY, concept.id):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# it may be a concept that references a set
|
# it may be a concept that references a set
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from core.sheerka.services.sheerka_service import ServiceObj
|
from cache.Cache import Cache
|
||||||
|
from core.sheerka.services.sheerka_service import ServiceObj, BaseService
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -18,10 +19,20 @@ class Variable(ServiceObj):
|
|||||||
return f"{self.who}|{self.key}"
|
return f"{self.who}|{self.key}"
|
||||||
|
|
||||||
|
|
||||||
class SheerkaVariableManager:
|
class SheerkaVariableManager(BaseService):
|
||||||
|
NAME = "VariableManager"
|
||||||
|
VARIABLES_ENTRY = "Variables" # entry for admin or internal variables
|
||||||
|
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
super().__init__(sheerka)
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaVariableManager.record)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaVariableManager.load)
|
||||||
|
self.sheerka.bind_service_method(self, SheerkaVariableManager.delete)
|
||||||
|
|
||||||
|
cache = Cache(default=lambda k: self.sheerka.sdp.get(self.VARIABLES_ENTRY, k))
|
||||||
|
self.sheerka.cache_manager.register_cache(self.VARIABLES_ENTRY, cache, True, True)
|
||||||
|
|
||||||
def record(self, context, who, key, value):
|
def record(self, context, who, key, value):
|
||||||
"""
|
"""
|
||||||
@@ -34,14 +45,14 @@ class SheerkaVariableManager:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
variable = Variable(context.event.get_digest(), who, key, value, None)
|
variable = Variable(context.event.get_digest(), who, key, value, None)
|
||||||
self.sheerka.cache_manager.put(self.sheerka.VARIABLES_ENTRY, variable.get_key(), variable)
|
self.sheerka.cache_manager.put(self.VARIABLES_ENTRY, variable.get_key(), variable)
|
||||||
|
|
||||||
def load(self, who, key):
|
def load(self, who, key):
|
||||||
variable = self.sheerka.cache_manager.get(self.sheerka.VARIABLES_ENTRY, who + "|" + key)
|
variable = self.sheerka.cache_manager.get(self.VARIABLES_ENTRY, who + "|" + key)
|
||||||
if variable is None:
|
if variable is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return variable.value
|
return variable.value
|
||||||
|
|
||||||
def delete(self, context, who, key):
|
def delete(self, context, who, key):
|
||||||
self.sheerka.cache_manager.delete(self.sheerka.VARIABLES_ENTRY, who + "|" + key)
|
self.sheerka.cache_manager.delete(self.VARIABLES_ENTRY, who + "|" + key)
|
||||||
|
|||||||
@@ -12,3 +12,10 @@ class BaseService:
|
|||||||
"""
|
"""
|
||||||
def __init__(self, sheerka):
|
def __init__(self, sheerka):
|
||||||
self.sheerka = sheerka
|
self.sheerka = sheerka
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
"""
|
||||||
|
Adds cache or bind methods
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ class PythonEvaluator(OneReturnValueEvaluator):
|
|||||||
def get_globals(self, context, node):
|
def get_globals(self, context, node):
|
||||||
my_locals = {
|
my_locals = {
|
||||||
"sheerka": context.sheerka,
|
"sheerka": context.sheerka,
|
||||||
"desc": context.sheerka.dump_handler.dump_desc,
|
# "desc": context.sheerka.dump_handler.dump_desc,
|
||||||
"concepts": context.sheerka.dump_handler.dump_concepts,
|
# "concepts": context.sheerka.dump_handler.dump_concepts,
|
||||||
"history": context.sheerka.dump_handler.dump_history,
|
# "history": context.sheerka.dump_handler.dump_history,
|
||||||
"state": context.sheerka.dump_handler.dump_state,
|
# "state": context.sheerka.dump_handler.dump_state,
|
||||||
"Concept": core.concept.Concept,
|
"Concept": core.concept.Concept,
|
||||||
"BuiltinConcepts": core.builtin_concepts.BuiltinConcepts,
|
"BuiltinConcepts": core.builtin_concepts.BuiltinConcepts,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from core.builtin_concepts import BuiltinConcepts
|
from core.builtin_concepts import BuiltinConcepts
|
||||||
from core.concept import Concept
|
from core.concept import Concept
|
||||||
|
from core.sheerka.services.SheerkaSetsManager import SheerkaSetsManager
|
||||||
|
|
||||||
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
@@ -15,12 +16,12 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
)
|
)
|
||||||
assert sheerka.add_concept_to_set(context, foo, group).status
|
assert sheerka.add_concept_to_set(context, foo, group).status
|
||||||
|
|
||||||
group_elements = sheerka.cache_manager.get(sheerka.CONCEPTS_GROUPS_ENTRY, group.id)
|
group_elements = sheerka.cache_manager.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY, group.id)
|
||||||
assert group_elements == {foo.id}
|
assert group_elements == {foo.id}
|
||||||
|
|
||||||
# it can be persisted
|
# it can be persisted
|
||||||
sheerka.cache_manager.commit(context)
|
sheerka.cache_manager.commit(context)
|
||||||
assert sheerka.sdp.get(sheerka.CONCEPTS_GROUPS_ENTRY, group.id) == {foo.id}
|
assert sheerka.sdp.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY, group.id) == {foo.id}
|
||||||
|
|
||||||
def test_i_cannot_add_the_same_concept_twice_in_a_set(self):
|
def test_i_cannot_add_the_same_concept_twice_in_a_set(self):
|
||||||
sheerka, context, foo, group = self.init_concepts(Concept("foo"), Concept("group"))
|
sheerka, context, foo, group = self.init_concepts(Concept("foo"), Concept("group"))
|
||||||
@@ -34,7 +35,7 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
assert res.body.body == foo
|
assert res.body.body == foo
|
||||||
assert res.body.concept_set == group
|
assert res.body.concept_set == group
|
||||||
|
|
||||||
all_entries = sheerka.cache_manager.get(sheerka.CONCEPTS_GROUPS_ENTRY, group.id)
|
all_entries = sheerka.cache_manager.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY, group.id)
|
||||||
assert all_entries == {foo.id}
|
assert all_entries == {foo.id}
|
||||||
|
|
||||||
def test_i_can_have_multiple_groups(self):
|
def test_i_can_have_multiple_groups(self):
|
||||||
@@ -52,12 +53,12 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
assert sheerka.add_concept_to_set(context, bar, group2).status
|
assert sheerka.add_concept_to_set(context, bar, group2).status
|
||||||
assert sheerka.add_concept_to_set(context, baz, group2).status
|
assert sheerka.add_concept_to_set(context, baz, group2).status
|
||||||
|
|
||||||
assert sheerka.cache_manager.get(sheerka.CONCEPTS_GROUPS_ENTRY, group1.id) == {foo.id, bar.id}
|
assert sheerka.cache_manager.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY, group1.id) == {foo.id, bar.id}
|
||||||
assert sheerka.cache_manager.get(sheerka.CONCEPTS_GROUPS_ENTRY, group2.id) == {baz.id, bar.id}
|
assert sheerka.cache_manager.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY, group2.id) == {baz.id, bar.id}
|
||||||
|
|
||||||
# I can save in db
|
# I can save in db
|
||||||
sheerka.cache_manager.commit(context)
|
sheerka.cache_manager.commit(context)
|
||||||
assert sheerka.sdp.get(sheerka.CONCEPTS_GROUPS_ENTRY) == {
|
assert sheerka.sdp.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY) == {
|
||||||
'1004': {'1001', '1002'}, '1005': {'1002', '1003'}
|
'1004': {'1001', '1002'}, '1005': {'1002', '1003'}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +96,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
sheerka, context, foo, bar, group1, group2 = self.init_concepts(
|
sheerka, context, foo, bar, group1, group2 = self.init_concepts(
|
||||||
"foo", "bar", "group1", Concept("group2", body="group1"))
|
"foo", "bar", "group1", Concept("group2", body="group1"))
|
||||||
|
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [foo, bar], group1)
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
service.add_concepts_to_set(context, [foo, bar], group1)
|
||||||
|
|
||||||
assert sheerka.isaset(context, group2)
|
assert sheerka.isaset(context, group2)
|
||||||
assert set(sheerka.get_set_elements(context, group2)) == {foo, bar}
|
assert set(sheerka.get_set_elements(context, group2)) == {foo, bar}
|
||||||
@@ -110,7 +112,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("number"),
|
Concept("number"),
|
||||||
Concept("sub_number", body="number", where="number < 4")
|
Concept("sub_number", body="number", where="number < 4")
|
||||||
)
|
)
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [one, two, three, four, five], number)
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
service.add_concepts_to_set(context, [one, two, three, four, five], number)
|
||||||
|
|
||||||
assert sheerka.isaset(context, sub_number)
|
assert sheerka.isaset(context, sub_number)
|
||||||
assert set(sheerka.get_set_elements(context, sub_number)) == {one, two, three}
|
assert set(sheerka.get_set_elements(context, sub_number)) == {one, two, three}
|
||||||
@@ -126,7 +129,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("sub_number", body="number", where="number < 4"),
|
Concept("sub_number", body="number", where="number < 4"),
|
||||||
Concept("sub_sub_number", body="sub_number", where="sub_number > 2")
|
Concept("sub_sub_number", body="sub_number", where="sub_number > 2")
|
||||||
)
|
)
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [one, two, three, four, five], number)
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
service.add_concepts_to_set(context, [one, two, three, four, five], number)
|
||||||
|
|
||||||
assert sheerka.isaset(context, sub_sub_number)
|
assert sheerka.isaset(context, sub_sub_number)
|
||||||
assert set(sheerka.get_set_elements(context, sub_sub_number)) == {three}
|
assert set(sheerka.get_set_elements(context, sub_sub_number)) == {three}
|
||||||
@@ -149,7 +153,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("number"),
|
Concept("number"),
|
||||||
Concept("sub_number", body="number", where="number < 4")
|
Concept("sub_number", body="number", where="number < 4")
|
||||||
)
|
)
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [one, two, three, four, five], number)
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
service.add_concepts_to_set(context, [one, two, three, four, five], number)
|
||||||
|
|
||||||
assert sheerka.isaset(context, sub_number)
|
assert sheerka.isaset(context, sub_number)
|
||||||
assert set(sheerka.get_set_elements(context, sub_number)) == {one, three}
|
assert set(sheerka.get_set_elements(context, sub_number)) == {one, three}
|
||||||
@@ -170,8 +175,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("number"),
|
Concept("number"),
|
||||||
Concept("sub_number", body="number", where="number >= 20")
|
Concept("sub_number", body="number", where="number >= 20")
|
||||||
)
|
)
|
||||||
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [one, two, twenty, twenties], number)
|
service.add_concepts_to_set(context, [one, two, twenty, twenties], number)
|
||||||
|
|
||||||
assert sheerka.isaset(context, sub_number)
|
assert sheerka.isaset(context, sub_number)
|
||||||
assert sheerka.get_set_elements(context, sub_number) == [twenty] # what is expected ?
|
assert sheerka.get_set_elements(context, sub_number) == [twenty] # what is expected ?
|
||||||
@@ -195,8 +200,8 @@ class TestSheerkaSetsManager(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("number"),
|
Concept("number"),
|
||||||
create_new=True
|
create_new=True
|
||||||
)
|
)
|
||||||
|
service = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [one, two, twenty, twenties], number)
|
service.add_concepts_to_set(context, [one, two, twenty, twenties], number)
|
||||||
assert sheerka.isinset(twenties, number)
|
assert sheerka.isinset(twenties, number)
|
||||||
|
|
||||||
twenty_one = sheerka.evaluate_user_input("twenty one", "")[0].body
|
twenty_one = sheerka.evaluate_user_input("twenty one", "")[0].body
|
||||||
@@ -264,7 +269,7 @@ class TestSheerkaSetsManagerUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
|||||||
assert set(sheerka.get_set_elements(context, group)) == {foo, bar}
|
assert set(sheerka.get_set_elements(context, group)) == {foo, bar}
|
||||||
|
|
||||||
sheerka.cache_manager.commit(context) # save in db
|
sheerka.cache_manager.commit(context) # save in db
|
||||||
all_entries = sheerka.sdp.get(sheerka.CONCEPTS_GROUPS_ENTRY) # check the db
|
all_entries = sheerka.sdp.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY) # check the db
|
||||||
assert all_entries == {
|
assert all_entries == {
|
||||||
group.id: {foo.id, bar.id}
|
group.id: {foo.id, bar.id}
|
||||||
}
|
}
|
||||||
@@ -276,14 +281,15 @@ class TestSheerkaSetsManagerUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
|||||||
for c in [foo3, foo4]:
|
for c in [foo3, foo4]:
|
||||||
sheerka.create_new_concept(context, c)
|
sheerka.create_new_concept(context, c)
|
||||||
|
|
||||||
res = sheerka.sets_handler.add_concepts_to_set(context, (foo3, foo4), group)
|
sets_handler = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
res = sets_handler.add_concepts_to_set(context, (foo3, foo4), group)
|
||||||
assert res.status
|
assert res.status
|
||||||
|
|
||||||
# I can get the elements
|
# I can get the elements
|
||||||
assert set(sheerka.get_set_elements(context, group)) == {foo, bar, foo3, foo4}
|
assert set(sheerka.get_set_elements(context, group)) == {foo, bar, foo3, foo4}
|
||||||
|
|
||||||
sheerka.cache_manager.commit(context) # save in db
|
sheerka.cache_manager.commit(context) # save in db
|
||||||
all_entries = sheerka.sdp.get(sheerka.CONCEPTS_GROUPS_ENTRY) # check the db
|
all_entries = sheerka.sdp.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY) # check the db
|
||||||
assert all_entries == {
|
assert all_entries == {
|
||||||
group.id: {foo.id, bar.id, foo3.id, foo4.id}
|
group.id: {foo.id, bar.id, foo3.id, foo4.id}
|
||||||
}
|
}
|
||||||
@@ -322,7 +328,7 @@ class TestSheerkaSetsManagerUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
|||||||
|
|
||||||
# they are both in the same group
|
# they are both in the same group
|
||||||
sheerka = self.get_sheerka()
|
sheerka = self.get_sheerka()
|
||||||
all_entries = sheerka.sdp.get(sheerka.CONCEPTS_GROUPS_ENTRY)
|
all_entries = sheerka.sdp.get(SheerkaSetsManager.CONCEPTS_GROUPS_ENTRY)
|
||||||
assert all_entries == {
|
assert all_entries == {
|
||||||
group.id: {foo.id, bar.id}
|
group.id: {foo.id, bar.id}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from core.concept import Concept, ConceptParts
|
from core.concept import Concept, ConceptParts
|
||||||
from core.sheerka.Sheerka import Sheerka
|
from core.sheerka.Sheerka import Sheerka
|
||||||
|
from core.sheerka.services.SheerkaVariableManager import SheerkaVariableManager
|
||||||
|
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
|
|
||||||
@@ -16,8 +17,8 @@ class TestSheerkaVariable(TestUsingMemoryBasedSheerka):
|
|||||||
# I can persist in db
|
# I can persist in db
|
||||||
sheerka.cache_manager.commit(context)
|
sheerka.cache_manager.commit(context)
|
||||||
|
|
||||||
assert sheerka.sdp.exists(Sheerka.VARIABLES_ENTRY, "TestSheerkaVariable|my_variable")
|
assert sheerka.sdp.exists(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable|my_variable")
|
||||||
loaded = sheerka.sdp.get(Sheerka.VARIABLES_ENTRY, "TestSheerkaVariable|my_variable")
|
loaded = sheerka.sdp.get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable|my_variable")
|
||||||
assert loaded.event_id == context.event.get_digest()
|
assert loaded.event_id == context.event.get_digest()
|
||||||
assert loaded.key == "my_variable"
|
assert loaded.key == "my_variable"
|
||||||
assert loaded.value == 1
|
assert loaded.value == 1
|
||||||
@@ -58,7 +59,7 @@ class TestSheerkaVariable(TestUsingMemoryBasedSheerka):
|
|||||||
# res = sheerka.load("TestSheerkaVariable", "my_variable")
|
# res = sheerka.load("TestSheerkaVariable", "my_variable")
|
||||||
# assert res == 2
|
# assert res == 2
|
||||||
#
|
#
|
||||||
# loaded = sheerka.sdp.get(Sheerka.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
# loaded = sheerka.sdp.get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
||||||
# assert loaded.event_id == context.event.get_digest()
|
# assert loaded.event_id == context.event.get_digest()
|
||||||
# assert loaded.key == "my_variable"
|
# assert loaded.key == "my_variable"
|
||||||
# assert loaded.value == 2
|
# assert loaded.value == 2
|
||||||
@@ -79,7 +80,7 @@ class TestSheerkaVariable(TestUsingMemoryBasedSheerka):
|
|||||||
# sheerka.record(context, "TestSheerkaVariable", "my_variable", 1)
|
# sheerka.record(context, "TestSheerkaVariable", "my_variable", 1)
|
||||||
# sheerka.record(context, "TestSheerkaVariable", "my_variable", 1)
|
# sheerka.record(context, "TestSheerkaVariable", "my_variable", 1)
|
||||||
#
|
#
|
||||||
# loaded = sheerka.sdp.get(Sheerka.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
# loaded = sheerka.sdp.get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
||||||
# assert loaded.event_id == context.event.get_digest()
|
# assert loaded.event_id == context.event.get_digest()
|
||||||
# assert loaded.key == "my_variable"
|
# assert loaded.key == "my_variable"
|
||||||
# assert loaded.value == 1
|
# assert loaded.value == 1
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka):
|
|||||||
|
|
||||||
assert len(sheerka.services) > 0
|
assert len(sheerka.services) > 0
|
||||||
assert None not in sheerka.services
|
assert None not in sheerka.services
|
||||||
assert "ComparisonManager" in sheerka.services # test at least one service
|
assert "VariableManager" in sheerka.services # test at least one service
|
||||||
|
|
||||||
def test_i_can_initialize_builtin_parsers(self):
|
def test_i_can_initialize_builtin_parsers(self):
|
||||||
sheerka = self.get_sheerka()
|
sheerka = self.get_sheerka()
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import pytest
|
|||||||
|
|
||||||
from core.builtin_concepts import ReturnValueConcept, BuiltinConcepts
|
from core.builtin_concepts import ReturnValueConcept, BuiltinConcepts
|
||||||
from core.concept import Concept
|
from core.concept import Concept
|
||||||
|
from core.sheerka.services.SheerkaSetsManager import SheerkaSetsManager
|
||||||
from evaluators.EvalEvaluator import EvalEvaluator
|
from evaluators.EvalEvaluator import EvalEvaluator
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
|
|
||||||
@@ -69,7 +70,8 @@ class TestEvalEvaluator(TestUsingMemoryBasedSheerka):
|
|||||||
Concept("bar"),
|
Concept("bar"),
|
||||||
Concept("baz"),
|
Concept("baz"),
|
||||||
Concept("number"))
|
Concept("number"))
|
||||||
sheerka.sets_handler.add_concepts_to_set(context, [foo, bar, baz], number)
|
sets_handler = sheerka.services[SheerkaSetsManager.NAME]
|
||||||
|
sets_handler.add_concepts_to_set(context, [foo, bar, baz], number)
|
||||||
|
|
||||||
evaluated = EvalEvaluator().eval(context, [retval(number)])
|
evaluated = EvalEvaluator().eval(context, [retval(number)])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user