Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -19,6 +19,9 @@ class Variable(ServiceObj):
|
||||
def get_key(self):
|
||||
return f"{self.who}|{self.key}"
|
||||
|
||||
def __str__(self):
|
||||
return f"({self.who}){self.key}={self.value}"
|
||||
|
||||
|
||||
class SheerkaVariableManager(BaseService):
|
||||
NAME = "VariableManager"
|
||||
@@ -26,18 +29,28 @@ class SheerkaVariableManager(BaseService):
|
||||
|
||||
def __init__(self, sheerka):
|
||||
super().__init__(sheerka)
|
||||
self.bound = {
|
||||
"sheerka.enable_process_return_values": "enable_process_return_values",
|
||||
"sheerka.save_execution_context": "save_execution_context"
|
||||
}
|
||||
|
||||
def initialize(self):
|
||||
self.sheerka.bind_service_method(self.record, True)
|
||||
self.sheerka.bind_service_method(self.load, False)
|
||||
self.sheerka.bind_service_method(self.delete, True)
|
||||
self.sheerka.bind_service_method(self.set, True)
|
||||
self.sheerka.bind_service_method(self.get, False)
|
||||
self.sheerka.bind_service_method(self.record_var, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.load_var, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.delete_var, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.set_var, True)
|
||||
self.sheerka.bind_service_method(self.get_var, False)
|
||||
self.sheerka.bind_service_method(self.list_vars, False)
|
||||
|
||||
cache = Cache(default=lambda k: self.sheerka.sdp.get(self.VARIABLES_ENTRY, k))
|
||||
cache = Cache()
|
||||
cache.populate(lambda: self.sheerka.sdp.list(self.VARIABLES_ENTRY), lambda var: var.get_key())
|
||||
self.sheerka.cache_manager.register_cache(self.VARIABLES_ENTRY, cache, True, True)
|
||||
|
||||
def record(self, context, who, key, value):
|
||||
for variable in cache.get_all():
|
||||
if variable.key in self.bound:
|
||||
setattr(self.sheerka, self.bound[variable.key], variable.value)
|
||||
|
||||
def record_var(self, context, who, key, value):
|
||||
"""
|
||||
|
||||
:param context:
|
||||
@@ -49,20 +62,33 @@ class SheerkaVariableManager(BaseService):
|
||||
|
||||
variable = Variable(context.event.get_digest(), who, key, value, None)
|
||||
self.sheerka.cache_manager.put(self.VARIABLES_ENTRY, variable.get_key(), variable)
|
||||
|
||||
# TODO: manage credentials
|
||||
if key in self.bound:
|
||||
setattr(self.sheerka, self.bound[key], value)
|
||||
|
||||
return self.sheerka.ret(self.NAME, True, self.sheerka.new(BuiltinConcepts.SUCCESS))
|
||||
|
||||
def load(self, who, key):
|
||||
def load_var(self, who, key):
|
||||
variable = self.sheerka.cache_manager.get(self.VARIABLES_ENTRY, who + "|" + key)
|
||||
if variable is None:
|
||||
return None
|
||||
|
||||
return variable.value
|
||||
|
||||
def delete(self, context, who, key):
|
||||
def delete_var(self, context, who, key):
|
||||
self.sheerka.cache_manager.delete(self.VARIABLES_ENTRY, who + "|" + key)
|
||||
|
||||
def set(self, context, key, value):
|
||||
return self.record(context, context.event.user_id, key, value)
|
||||
def set_var(self, context, key, value):
|
||||
return self.record_var(context, context.event.user_id, key, value)
|
||||
|
||||
def get(self, context, key):
|
||||
return self.load(context.event.user_id, key)
|
||||
def get_var(self, context, key):
|
||||
return self.load_var(context.event.user_id, key)
|
||||
|
||||
def list_vars(self, context, all_vars=False):
|
||||
if all_vars:
|
||||
res = [str(v) for v in self.sheerka.cache_manager.copy(self.VARIABLES_ENTRY).values()]
|
||||
else:
|
||||
res = [str(v) for v in self.sheerka.cache_manager.copy(self.VARIABLES_ENTRY).values() if
|
||||
v.who == context.event.user_id]
|
||||
return res
|
||||
|
||||
Reference in New Issue
Block a user