Fixed #51 : Added unit tests
This commit is contained in:
@@ -85,7 +85,7 @@ class SheerkaEvaluateRules(BaseService):
|
||||
results.setdefault(LOW_PRIORITY_RULES, []).append(rule)
|
||||
continue
|
||||
|
||||
res = self.evaluate_rule(sub_context, rule, bag)
|
||||
res = self.evaluate_rule_old(sub_context, rule, bag)
|
||||
ok = res.status and self.sheerka.is_success(self.sheerka.objvalue(res))
|
||||
results.setdefault(ok, []).append(rule)
|
||||
if ok and success_priority is None:
|
||||
@@ -96,9 +96,9 @@ class SheerkaEvaluateRules(BaseService):
|
||||
sub_context.add_values(rules_result=results)
|
||||
return results
|
||||
|
||||
def evaluate_rule(self, context, rule, bag):
|
||||
def evaluate_rule_old(self, context, rule, bag):
|
||||
"""
|
||||
Evaluate all the predicate
|
||||
Evaluate the conditions
|
||||
:param context:
|
||||
:param rule:
|
||||
:param bag:
|
||||
@@ -132,6 +132,47 @@ class SheerkaEvaluateRules(BaseService):
|
||||
|
||||
return expect_one(context, results)
|
||||
|
||||
def evaluate_rule(self, context, rule, bag):
|
||||
"""
|
||||
Evaluate the conditions
|
||||
:param context:
|
||||
:param rule:
|
||||
:param bag:
|
||||
:return:
|
||||
"""
|
||||
|
||||
bag_variables = set(bag.keys())
|
||||
|
||||
results = []
|
||||
for compiled_condition in rule.compiled_conditions:
|
||||
|
||||
if compiled_condition.variables.intersection(bag_variables) != compiled_condition.variables:
|
||||
continue
|
||||
|
||||
if compiled_condition.return_value is None:
|
||||
# We only want to test the existence of a data
|
||||
results.append(context.sheerka.ret(self.NAME, True, True))
|
||||
|
||||
else:
|
||||
|
||||
# do not forget to reset the 'is_evaluated' in the case of a concept
|
||||
if compiled_condition.evaluator_type == ConceptEvaluator.NAME:
|
||||
compiled_condition.concept.get_metadata().is_evaluated = False
|
||||
|
||||
evaluator = self.evaluators_by_name[compiled_condition.evaluator]
|
||||
res = evaluator.eval(context, compiled_condition.return_value)
|
||||
if res.status and isinstance(res.body, bool) and res.body:
|
||||
# one successful value found. No need to look any further
|
||||
results = [res]
|
||||
break
|
||||
else:
|
||||
results.append(res)
|
||||
|
||||
debugger = context.get_debugger(SheerkaEvaluateRules.NAME, "evaluate_rule", new_debug_id=False)
|
||||
debugger.debug_rule(rule, results)
|
||||
|
||||
return expect_one(context, results)
|
||||
|
||||
def remove_from_rete_memory(self, lst):
|
||||
if lst is None:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user