Fixed #32 : concept groups are not correctly updated
Fixed #35 : Refactor test helper class (CNC, CC, CIO) Fixed #36 : Concept values are not used when declared with variable expression Fixed #37 : Objects in memory lose their values are restart Fixed #38 : func(a=b, c) (which is not allowed) raise an exception
This commit is contained in:
@@ -12,6 +12,15 @@ from core.sheerka.services.sheerka_service import BaseService, ServiceObj
|
||||
class MemoryObject(ServiceObj):
|
||||
obj: object
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, MemoryObject):
|
||||
return False
|
||||
|
||||
return self.obj == other.obj and self.event_id == other.event_id
|
||||
|
||||
def __hash__(self):
|
||||
return hash((self.event_id, self.obj))
|
||||
|
||||
|
||||
class SheerkaMemory(BaseService):
|
||||
NAME = "Memory"
|
||||
@@ -26,6 +35,7 @@ class SheerkaMemory(BaseService):
|
||||
|
||||
def initialize(self):
|
||||
self.sheerka.bind_service_method(self.get_from_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.get_all_short_term_memory, False, visible=False)
|
||||
self.sheerka.bind_service_method(self.add_to_short_term_memory, True, visible=False)
|
||||
self.sheerka.bind_service_method(self.remove_context, True, as_name="clear_short_term_memory", visible=False)
|
||||
self.sheerka.bind_service_method(self.add_to_memory, True, visible=False)
|
||||
@@ -62,8 +72,26 @@ class SheerkaMemory(BaseService):
|
||||
|
||||
context = context.get_parent()
|
||||
|
||||
def get_all_short_term_memory(self, context):
|
||||
return self.short_term_objects.get(context.id)
|
||||
def get_all_short_term_memory(self, context, recursive=False):
|
||||
id_to_use = context.id if context else self.GLOBAL
|
||||
|
||||
if not recursive:
|
||||
return self.short_term_objects.get(id_to_use)
|
||||
|
||||
all_vars = {}
|
||||
while True:
|
||||
try:
|
||||
all_vars.update(self.short_term_objects.cache[id_to_use])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
if id_to_use == self.GLOBAL:
|
||||
break
|
||||
else:
|
||||
context = context.get_parent()
|
||||
id_to_use = context.id if context else self.GLOBAL
|
||||
|
||||
return all_vars
|
||||
|
||||
def add_to_short_term_memory(self, context, key, value):
|
||||
if context:
|
||||
@@ -99,12 +127,12 @@ class SheerkaMemory(BaseService):
|
||||
if last is NotFound:
|
||||
self.sheerka.om.put(SheerkaMemory.OBJECTS_ENTRY, key, MemoryObject(context.event.get_digest(), concept))
|
||||
return
|
||||
|
||||
|
||||
if not isinstance(last, list) and last.obj == concept:
|
||||
self.sheerka.om.delete(SheerkaMemory.OBJECTS_ENTRY, key, last)
|
||||
self.sheerka.om.put(SheerkaMemory.OBJECTS_ENTRY, key, MemoryObject(context.event.get_digest(), concept))
|
||||
return
|
||||
|
||||
|
||||
if isinstance(last, list) and last[-1].obj == concept:
|
||||
self.sheerka.om.delete(SheerkaMemory.OBJECTS_ENTRY, key, last[-1])
|
||||
self.sheerka.om.put(SheerkaMemory.OBJECTS_ENTRY, key, MemoryObject(context.event.get_digest(), concept))
|
||||
|
||||
Reference in New Issue
Block a user