Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -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})"
|
||||
Reference in New Issue
Block a user