I can manage infinite recursion when building concept
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from core.builtin_concepts import ReturnValueConcept, UserInputConcept, BuiltinConcepts, ParserResultConcept
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput, SheerkaExecute
|
||||
from parsers.BaseParser import BaseParser
|
||||
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
@@ -142,12 +142,74 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
# Ask for a new one
|
||||
TestUsingMemoryBasedSheerka.singleton_instance = None
|
||||
|
||||
def test_i_can_get_parser_when_context_is_not_altered(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
sheerka.parsers = {
|
||||
"Enabled90False": Enabled90FalseParser,
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
}
|
||||
service = SheerkaExecute(sheerka)
|
||||
service.reset_registered_parsers()
|
||||
|
||||
groups, sorted_priorities = service.get_parsers(context)
|
||||
assert groups == {80: [Enabled80FalseParser()], 90: [Enabled90FalseParser()]}
|
||||
assert sorted_priorities == [90, 80]
|
||||
|
||||
def test_i_can_get_selected_parsers(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
sheerka.parsers = {
|
||||
"Enabled90False": Enabled90FalseParser,
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
"Enabled70False": Enabled70FalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
"Disabled": Enabled50TrueParser, # <= this one is disabled. It can't be used
|
||||
}
|
||||
service = SheerkaExecute(sheerka)
|
||||
service.reset_registered_parsers()
|
||||
parsers_names = ["Enabled50True", "Enabled70False", "Disabled"]
|
||||
context.preprocess_parsers = parsers_names
|
||||
|
||||
groups, sorted_priorities = service.get_parsers(context)
|
||||
assert groups == {50: [Enabled50TrueParser()], 70: [Enabled70FalseParser()]}
|
||||
assert sorted_priorities == [70, 50] # Disabled parser does not appear
|
||||
|
||||
key = "|".join(parsers_names)
|
||||
assert key in service.grouped_parsers_cache
|
||||
groups, sorted_priorities = service.grouped_parsers_cache[key]
|
||||
assert groups == {50: [Enabled50TrueParser], 70: [Enabled70FalseParser]}
|
||||
assert sorted_priorities == [70, 50]
|
||||
|
||||
def test_i_can_get_altered_parsers(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
sheerka.parsers = {
|
||||
"Enabled90False": Enabled90FalseParser,
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
"Enabled70False": Enabled70FalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
"Disabled": Enabled50TrueParser, # <= this one is disabled. It can't be used
|
||||
}
|
||||
service = SheerkaExecute(sheerka)
|
||||
service.reset_registered_parsers()
|
||||
parsers_names = ["Enabled90False", "Enabled50True", "Enabled70False", "Disabled"]
|
||||
context.preprocess_parsers = parsers_names
|
||||
context.add_preprocess(BaseParser.get_name("Enabled90False"), enabled=False)
|
||||
context.add_preprocess(BaseParser.get_name("Enabled50True"), priority=80)
|
||||
|
||||
groups, sorted_priorities = service.get_parsers(context)
|
||||
assert groups == {80: [Enabled50TrueParser()], 70: [Enabled70FalseParser()]}
|
||||
assert sorted_priorities == [80, 70] # Disabled parsers does not appear
|
||||
|
||||
key = "|".join(parsers_names)
|
||||
assert key not in service.grouped_parsers_cache # not saved in cache
|
||||
|
||||
def test_disabled_parsers_are_not_executed(self):
|
||||
sheerka = self.get_sheerka()
|
||||
sheerka.parsers = {
|
||||
"Enabled": Enabled10TrueParser,
|
||||
"Disabled": DisabledParser
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -162,6 +224,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -177,22 +241,25 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
'name=Enabled50True, priority=50, status=True, source=Enabled80False:Enabled90False:hello world',
|
||||
]
|
||||
|
||||
# def test_parsing_stop_at_the_first_success(self):
|
||||
# sheerka = self.get_sheerka()
|
||||
# sheerka.parsers = {
|
||||
# "Enabled80False": Enabled80FalseParser,
|
||||
# "Enabled50bisTrue": Enabled50bisTrueParser,
|
||||
# "Enabled10True": Enabled10TrueParser,
|
||||
# }
|
||||
#
|
||||
# user_input = [get_ret_val("hello world")]
|
||||
# BaseTestParser.debug_out = []
|
||||
# sheerka.execute(self.get_context(sheerka), user_input, [BuiltinConcepts.PARSING])
|
||||
#
|
||||
# assert BaseTestParser.debug_out == [
|
||||
# 'name=Enabled80False, priority=80, status=False, source=hello world',
|
||||
# 'name=Enabled50BisTrue, priority=50, status=True, source=hello world',
|
||||
# ]
|
||||
def test_parsing_stop_at_the_first_success(self):
|
||||
sheerka = self.get_sheerka()
|
||||
sheerka.parsers = {
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
"Enabled50bisTrue": Enabled50bisTrueParser,
|
||||
"Enabled10True": Enabled10TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
sheerka.execute(self.get_context(sheerka), user_input, [BuiltinConcepts.PARSING])
|
||||
|
||||
assert BaseTestParser.debug_out == [
|
||||
'name=Enabled80False, priority=80, status=False, source=hello world',
|
||||
'name=Enabled50BisTrue, priority=50, status=True, source=hello world',
|
||||
'name=Enabled50BisTrue, priority=50, status=True, source=Enabled80False:hello world',
|
||||
]
|
||||
|
||||
def test_parsing_stop_at_the_first_success_2(self):
|
||||
"""
|
||||
@@ -206,6 +273,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
"Enabled10True": Enabled10TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -235,6 +304,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled50False": Enabled50FalseParser,
|
||||
"Enabled10True": Enabled10TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -265,6 +336,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled80False": Enabled80FalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
|
||||
@@ -286,6 +359,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"NoneParser": NoneParser,
|
||||
"ListOfNone": ListOfNoneParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
|
||||
@@ -310,6 +385,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled70False": Enabled70FalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -329,6 +406,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled80MultipleFalse": Enabled80MultipleFalseParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
@@ -356,6 +435,8 @@ class TestSheerkaExecuteParsers(TestUsingMemoryBasedSheerka):
|
||||
"Enabled80MultipleTrue": Enabled80MultipleTrueParser,
|
||||
"Enabled50True": Enabled50TrueParser,
|
||||
}
|
||||
service = sheerka.services[SheerkaExecute.NAME]
|
||||
service.reset_registered_parsers()
|
||||
|
||||
user_input = [get_ret_val("hello world")]
|
||||
BaseTestParser.debug_out = []
|
||||
|
||||
Reference in New Issue
Block a user