Added parsers and Evaluators auto discovery
This commit is contained in:
+40
-13
@@ -65,17 +65,8 @@ class Sheerka(Concept):
|
||||
self.sdp.set_key(self.USER_CONCEPTS_KEYS, 1000)
|
||||
|
||||
self.initialize_builtin_concepts()
|
||||
|
||||
self.parsers.append(core.utils.get_class("parsers.DefaultParser.DefaultParser"))
|
||||
self.parsers.append(core.utils.get_class("parsers.PythonParser.PythonParser"))
|
||||
self.parsers.append(core.utils.get_class("parsers.ExactConceptParser.ExactConceptParser"))
|
||||
|
||||
self.evaluators.append(core.utils.new_object("evaluators.ParsersEvaluator.ParsersEvaluator"))
|
||||
self.evaluators.append(core.utils.new_object("evaluators.AddConceptEvaluator.AddConceptEvaluator"))
|
||||
self.evaluators.append(core.utils.new_object("evaluators.PythonEvaluator.PythonEvaluator"))
|
||||
self.evaluators.append(core.utils.new_object("evaluators.ConceptEvaluator.ConceptEvaluator"))
|
||||
self.evaluators.append(
|
||||
core.utils.new_object("evaluators.DuplicateConceptEvaluator.DuplicateConceptEvaluator"))
|
||||
self.initialize_builtin_parsers()
|
||||
self.initialize_builtin_evaluators()
|
||||
|
||||
except IOError as e:
|
||||
return ReturnValueConcept(self, False, self.get(BuiltinConcepts.ERROR), e)
|
||||
@@ -123,6 +114,28 @@ class Sheerka(Concept):
|
||||
|
||||
self.add_in_cache(concept)
|
||||
|
||||
def initialize_builtin_parsers(self):
|
||||
"""
|
||||
Init the parsers
|
||||
:return:
|
||||
"""
|
||||
for parser in core.utils.get_sub_classes("parsers", "parsers.BaseParser.BaseParser"):
|
||||
log.debug(f"Adding builtin parser '{parser.__name__}'")
|
||||
self.parsers.append(parser)
|
||||
|
||||
def initialize_builtin_evaluators(self):
|
||||
"""
|
||||
Init the evaluators
|
||||
:return:
|
||||
"""
|
||||
for evaluator in core.utils.get_sub_classes("evaluators", "evaluators.BaseEvaluator.OneReturnValueEvaluator"):
|
||||
log.debug(f"Adding builtin evaluator '{evaluator.__name__}'")
|
||||
self.evaluators.append(evaluator)
|
||||
|
||||
for evaluator in core.utils.get_sub_classes("evaluators", "evaluators.BaseEvaluator.AllReturnValuesEvaluator"):
|
||||
log.debug(f"Adding builtin evaluator '{evaluator.__name__}'")
|
||||
self.evaluators.append(evaluator)
|
||||
|
||||
def init_logging(self):
|
||||
if self.debug:
|
||||
log_format = "%(asctime)s %(name)s [%(levelname)s] %(message)s"
|
||||
@@ -197,17 +210,18 @@ class Sheerka(Concept):
|
||||
def process(self, context, return_values, contextual_concepts=None):
|
||||
log.debug("Evaluating parsing result.")
|
||||
|
||||
# init
|
||||
# return_values must be a list
|
||||
if not isinstance(return_values, list):
|
||||
return_values = [return_values]
|
||||
|
||||
# adds contextual concepts
|
||||
if contextual_concepts:
|
||||
return_values.extend(contextual_concepts)
|
||||
|
||||
# group the evaluators by priority and sort them
|
||||
# The first one to be applied will be the one with the highest priority
|
||||
grouped_evaluators = {}
|
||||
for item in self.evaluators:
|
||||
for item in [e() for e in self.evaluators]:
|
||||
grouped_evaluators.setdefault(item.priority, []).append(item)
|
||||
sorted_priorities = sorted(grouped_evaluators.keys(), reverse=True)
|
||||
|
||||
@@ -428,6 +442,19 @@ class Sheerka(Concept):
|
||||
|
||||
return res
|
||||
|
||||
@staticmethod
|
||||
def get_builtin_parsers():
|
||||
res = []
|
||||
# modules = core.utils.get_module("parsers")
|
||||
# for m in modules:
|
||||
base_class = core.utils.get_class("parsers.BaseParser.BaseParser")
|
||||
|
||||
for c in core.utils.get_classes_recursive("parsers"):
|
||||
#if issubclass(c, base_class) and c != base_class:
|
||||
res.append(c)
|
||||
|
||||
return res
|
||||
|
||||
@staticmethod
|
||||
def test():
|
||||
return "I have access to Sheerka !"
|
||||
|
||||
Reference in New Issue
Block a user