diff --git a/_concepts.txt b/_concepts.txt index 146a1a0..2fff434 100644 --- a/_concepts.txt +++ b/_concepts.txt @@ -1,10 +1,41 @@ def concept one as 1 def concept two as 2 def concept three as 3 -def concept one as 1 - -def concept two as 2 - -def concept three as 3 - def concept four as 4 +def concept five as 5 +def concept six as 6 +def concept seven as 7 +def concept eight as 8 +def concept nine as 9 +def concept ten as 10 +def concept eleven as 11 +def concept twelve as 12 +def concept thirteen as 13 +def concept fourteen as 14 +def concept fifteen as 15 +def concept sixteen as 16 +def concept seventeen as 17 +def concept eighteen as 18 +def concept nineteen as 19 +def concept twenty as 20 +def concept numbers +def one isa number +def two isa number +def three isa number +def four isa number +def five isa number +def six isa number +def seven isa number +def eight isa number +def nine isa number +def ten isa number +def eleven isa number +def twelve isa number +def thirteen isa number +def fourteen isa number +def fifteen isa number +def sixteen isa number +def seventeen isa number +def eighteen isa number +def nineteen isa number +def twenty isa number \ No newline at end of file diff --git a/src/core/sheerka/Services/SheerkaDump.py b/src/core/sheerka/Services/SheerkaDump.py index c6aa73b..dd5ce5f 100644 --- a/src/core/sheerka/Services/SheerkaDump.py +++ b/src/core/sheerka/Services/SheerkaDump.py @@ -42,6 +42,11 @@ class SheerkaDump: self.sheerka.log.info(f"body : {c.metadata.body}") self.sheerka.log.info(f"value : {c.body}") self.sheerka.log.info(f"digest : {c.get_digest()}") + + if self.sheerka.isaset(c): + items = self.sheerka.get_set_elements(c) + self.sheerka.log.info(f"elements : {items}") + first = False def dump_history(self, page=20, start=0): diff --git a/src/core/sheerka/Services/SheerkaSetsManager.py b/src/core/sheerka/Services/SheerkaSetsManager.py index 5065e1e..092c37c 100644 --- a/src/core/sheerka/Services/SheerkaSetsManager.py +++ b/src/core/sheerka/Services/SheerkaSetsManager.py @@ -74,7 +74,7 @@ class SheerkaSetsManager: return self.sheerka.sdp.exists(GROUP_PREFIX + b.id, a.id) - def isagroup(self, concept): + def isaset(self, concept): """True if exists All_ in sdp""" if not concept.id: return None diff --git a/src/core/sheerka/Sheerka.py b/src/core/sheerka/Sheerka.py index 7404573..28e5c4b 100644 --- a/src/core/sheerka/Sheerka.py +++ b/src/core/sheerka/Sheerka.py @@ -24,6 +24,7 @@ import logging CONCEPT_LEXER_PARSER_CLASS = "parsers.ConceptLexerParser.ConceptLexerParser" CONCEPTS_FILE = "_concepts.txt" + class Sheerka(Concept): """ Main controller for the project @@ -84,6 +85,8 @@ class Sheerka(Concept): self.evaluate_concept_handler = SheerkaEvaluateConcept(self) self.history_handler = SheerkaHistoryManager(self) + self.during_restore = False + def initialize(self, root_folder: str = None): """ Starting Sheerka @@ -244,10 +247,11 @@ class Sheerka(Concept): if not self.skip_builtins_in_db: self.sdp.save_result(self, execution_context) - #hack to save valid concept definition - if len(ret) == 1 and ret[0].status and self.isinstance(ret[0].value, BuiltinConcepts.NEW_CONCEPT): - with open(CONCEPTS_FILE, "a") as f: - f.write(text + "\n") + # hack to save valid concept definition + if not self.during_restore: + if len(ret) == 1 and ret[0].status and self.isinstance(ret[0].value, BuiltinConcepts.NEW_CONCEPT): + with open(CONCEPTS_FILE, "a") as f: + f.write(text + "\n") return ret def execute(self, execution_context, return_values, execution_steps, logger=None): @@ -534,8 +538,8 @@ class Sheerka(Concept): def isa(self, a, b): return self.sets_handler.isa(a, b) - def isagroup(self, concept): - return self.sets_handler.isagroup(concept) + def isaset(self, concept): + return self.sets_handler.isaset(concept) def get_evaluator_name(self, name): if self.evaluators_prefix is None: @@ -572,9 +576,11 @@ class Sheerka(Concept): :return: """ try: + self.during_restore = True with open(CONCEPTS_FILE, "r") as f: for line in f.readlines(): self.evaluate_user_input(line) + self.during_restore = False except IOError: pass diff --git a/src/parsers/ConceptLexerParser.py b/src/parsers/ConceptLexerParser.py index 7861597..db453af 100644 --- a/src/parsers/ConceptLexerParser.py +++ b/src/parsers/ConceptLexerParser.py @@ -694,7 +694,7 @@ class ConceptLexerParser(BaseParser): # A copy must be created def inner_get_model(expression): if isinstance(expression, Concept): - if self.sheerka.isagroup(expression): + if self.sheerka.isaset(expression): ret = ConceptGroupExpression(expression, rule_name=expression.name) else: ret = ConceptExpression(expression, rule_name=expression.name) diff --git a/tests/_concepts.txt b/tests/_concepts.txt new file mode 100644 index 0000000..d0aa449 --- /dev/null +++ b/tests/_concepts.txt @@ -0,0 +1,15 @@ +def concept one as 1 +def concept two as 2 +def concept three as 3 +def concept four as 4 +def concept five as 5 +def concept one as 1 +def concept two as 2 +def concept three as 3 +def concept four as 4 +def concept five as 5 +def concept one as 1 +def concept two as 2 +def concept three as 3 +def concept four as 4 +def concept five as 5 diff --git a/tests/core/_concepts.txt b/tests/core/_concepts.txt new file mode 100644 index 0000000..f1b1305 --- /dev/null +++ b/tests/core/_concepts.txt @@ -0,0 +1,10 @@ +def concept one as 1 +def concept two as 2 +def concept three as 3 +def concept four as 4 +def concept five as 5 +def concept one as 1 +def concept two as 2 +def concept three as 3 +def concept four as 4 +def concept five as 5 diff --git a/tests/core/test_SheerkaHistoryManager.py b/tests/core/test_SheerkaHistoryManager.py index 021ed98..c62ba23 100644 --- a/tests/core/test_SheerkaHistoryManager.py +++ b/tests/core/test_SheerkaHistoryManager.py @@ -18,7 +18,7 @@ class TestSheerkaHistoryManager(TestUsingMemoryBasedSheerka): sheerka.evaluate_user_input("def concept five as 5") sheerka.evaluate_user_input("five") - h = list(sheerka.history(-1)) # all + h = list(sheerka.history(-1)) # all assert h == [ hist("five", True), hist("def concept five as 5", True), @@ -35,18 +35,12 @@ class TestSheerkaHistoryManager(TestUsingMemoryBasedSheerka): h = list(sheerka.history(2)) assert h == [ - hist("two", True), - hist("def concept two as 2", True) + hist("five", True), + hist("def concept five as 5", True) ] h = list(sheerka.history(2, 2)) assert h == [ - hist("xxx", False), - hist("one", True), - ] - - h = list(sheerka.history(-1)) - assert h == [ - hist("xxx", False), - hist("one", True), + hist("four", True), + hist("def concept four as 4", True), ] diff --git a/tests/core/test_SheerkaSetsManager.py b/tests/core/test_SheerkaSetsManager.py index 85cc95b..158d98e 100644 --- a/tests/core/test_SheerkaSetsManager.py +++ b/tests/core/test_SheerkaSetsManager.py @@ -112,7 +112,7 @@ class TestSheerkaSetsManager(TestUsingFileBasedSheerka): group = Concept("group").init_key() group.metadata.id = "1001" - assert not sheerka.isagroup(group) + assert not sheerka.isaset(group) foo = Concept("foo").init_key() foo.metadata.id = "1002" @@ -120,5 +120,5 @@ class TestSheerkaSetsManager(TestUsingFileBasedSheerka): context = self.get_context(sheerka) sheerka.add_concept_to_set(context, foo, group) - assert sheerka.isagroup(group) + assert sheerka.isaset(group) assert sheerka.isa(foo, group)