Implement check() in ObjectBroker

master
Harald Wolff 2018-03-12 09:27:11 +01:00
parent 4687f34d9d
commit f9f5a0d89d
1 changed files with 30 additions and 1 deletions

View File

@ -55,6 +55,7 @@ class ObjectBroker:
self.__unsaved = {}
log("ObjectBroker instantiated", LLDEBUGCALL)
self.check()
def save(self,o,recursed=False):
@ -90,7 +91,7 @@ class ObjectBroker:
return o
state = pickle.loads(self.__store[ persistence_id ])
# dump_state(state)
dump_state(state)
m = __import__(state["module"],fromlist=[state["class"]])
cls = getattr(m, state["class"] )
@ -112,4 +113,32 @@ class ObjectBroker:
def remove(self,o=None,persistence_id=None):
pass
def check(self):
log("ObjectBroker: checking consistency of store",LLINFO)
clean = True
for uid in dir(self.__store):
if not uid == "ROOT":
try:
state = pickle.loads(self.__store[ uid ])
for n in state["pfields"]:
if not state["pfields"][n] in self.__store:
log("Found Object {0} referencing non-existent {1} = {2}".format(uid,n,state["pfields"][n]))
clean = False
except:
clean = False
# if not clean:
# log("ObjectBroker: consistency check failed!",LLERROR)
# raise Exception("ObjectBroker not consistent")
log("ObjectBroker: consistency check successful",LLINFO)