Fixed #48 : RelationalExpressionParser: Implement relational operator parser
Fixed #49 : ExpressionParser: Implement ExpressionParser Fixed #50 : Implement ReteConditionExprVisitor Fixed #51 : Implement PythonConditionExprVisitor Fixed #52 : SheerkaConceptManager: I can get and set concept property
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import ast
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from typing import Union
|
||||
from typing import Union, List
|
||||
|
||||
from core.builtin_concepts import ReturnValueConcept
|
||||
from core.builtin_helpers import CreateObjectIdentifiers
|
||||
@@ -18,7 +17,7 @@ from parsers.FunctionParser import FunctionNode
|
||||
from parsers.PythonParser import PythonNode
|
||||
from parsers.SyaNodeParser import SyaConceptParserHelper
|
||||
from sheerkarete.common import V
|
||||
from sheerkarete.conditions import Condition, AndConditions
|
||||
from sheerkarete.conditions import Condition, AndConditions, NegatedCondition, NegatedConjunctiveConditions
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -933,6 +932,16 @@ class FN:
|
||||
raise NotImplementedError(f"FN, {other=}")
|
||||
|
||||
|
||||
@dataclass()
|
||||
class NEGCOND:
|
||||
condition: str
|
||||
|
||||
|
||||
@dataclass()
|
||||
class NCCOND:
|
||||
conditions: List[str]
|
||||
|
||||
|
||||
comparison_type_mapping = {
|
||||
"EQ": ComparisonType.EQUALS,
|
||||
"NEQ": ComparisonType.NOT_EQUAlS,
|
||||
@@ -1295,10 +1304,10 @@ def resolve_test_concept(concept_map, hint):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def get_rete_conditions(*conditions_as_string):
|
||||
def get_rete_conditions(*conditions):
|
||||
"""
|
||||
Transform a list of string into a list of Condition (Rete conditions)
|
||||
:param conditions_as_string: conditions in the form 'identifier|attribute|value'
|
||||
:param conditions: conditions in the form 'identifier|attribute|value'
|
||||
when one argument starts with "#" it means that it's a variables
|
||||
ex : "#__x_00__|__name__|'__ret'" -> Condition(V('#__x_00__'), '__name__', '__ret')
|
||||
|
||||
@@ -1317,13 +1326,17 @@ def get_rete_conditions(*conditions_as_string):
|
||||
return int(obj)
|
||||
|
||||
res = []
|
||||
for as_string in conditions_as_string:
|
||||
if as_string.startswith("$"):
|
||||
fn_match = re.match(r"(?P<function>\w+)\s?\((?P<args>.+)\)", as_string[1:])
|
||||
as_dict = fn_match.groupdict()
|
||||
pass
|
||||
for cond in conditions:
|
||||
if isinstance(cond, Condition):
|
||||
res.append(cond)
|
||||
elif isinstance(cond, NEGCOND):
|
||||
inner_cond = get_rete_conditions(cond.condition).conditions[0]
|
||||
res.append(NegatedCondition(inner_cond.identifier, inner_cond.attribute, inner_cond.value))
|
||||
elif isinstance(cond, NCCOND):
|
||||
inner_conds = get_rete_conditions(*cond.conditions).conditions
|
||||
res.append(NegatedConjunctiveConditions(*inner_conds))
|
||||
else:
|
||||
parts = as_string.split("|")
|
||||
parts = cond.split("|")
|
||||
identifier = get_value(parts[0])
|
||||
attribute = parts[1]
|
||||
value = get_value(parts[2])
|
||||
|
||||
Reference in New Issue
Block a user