Added first version of DebugManager. Implemented draft of the rule engine

This commit is contained in:
2020-11-20 13:41:45 +01:00
parent cd066881b4
commit 315f8ea09b
156 changed files with 8388 additions and 2852 deletions
+84
View File
@@ -0,0 +1,84 @@
from dataclasses import dataclass
from typing import Union
import core.utils
ACTION_TYPE_PRINT = "print"
ACTION_TYPE_EXEC = "exec"
ACTION_TYPE_DEFERRED = "deferred"
@dataclass
class RuleMetadata:
action_type: str # print, exec, deferred
name: Union[str, None]
predicate: str
action: str
id: str = None
is_compiled: bool = False
is_enabled: bool = False
class Rule:
def __init__(self,
action_type=ACTION_TYPE_EXEC,
name=None,
predicate=None,
action=None,
priority=None,
is_enabled=None):
self.metadata = RuleMetadata(action_type, name, predicate, action, is_enabled=is_enabled)
self.compiled_predicate = None
self.compiled_action = None
from core.sheerka.services.SheerkaComparisonManager import SheerkaComparisonManager
self.priority = priority if priority is not None else SheerkaComparisonManager.DEFAULT_COMPARISON_VALUE
self.error_sink = None
def __repr__(self):
return f"Rule(#{self.metadata.id}, when '{self.metadata.predicate}' {self.metadata.action_type} '{self.metadata.action}', priority={self.priority})"
def __eq__(self, other):
if id(other) == id(self):
return True
if not isinstance(other, Rule):
return False
for p in ["name", "predicate", "action_type", "action", "id"]:
if getattr(self.metadata, p) != getattr(other.metadata, p):
return False
return True
def __hash__(self):
return hash((self.metadata.name,
self.metadata.predicate,
self.metadata.action_type,
self.metadata.action))
def set_id(self, rule_id):
self.metadata.id = rule_id
return self
def to_tuple_id(self):
return self.metadata.name, self.id
@property
def id(self):
return self.metadata.id
@property
def name(self):
return self.metadata.name
@property
def key(self):
return self.metadata.name
@property
def str_id(self):
return core.utils.str_concept(self, drop_name=True, prefix="r:")
def short_str(self):
return f"Rule(#{self.metadata.id}, '{self.metadata.predicate}', priority={self.priority})"