Did some work on the reload manager, as well as removed
the rollback importer from server.py
This commit is contained in:
parent
5ecbff32f6
commit
02ffa832f6
5 changed files with 93 additions and 31 deletions
51
reload/managers.py
Normal file
51
reload/managers.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import functions_general
|
||||
|
||||
class ReloadManager(object):
|
||||
objects_cache = {}
|
||||
failed = []
|
||||
|
||||
models = {}
|
||||
|
||||
def __init__(self, server):
|
||||
self.server = server
|
||||
|
||||
def do_cache(self):
|
||||
for module, info in self.models.iteritems():
|
||||
module_obj = __import__(module)
|
||||
for ituple in info:
|
||||
mclass = getattr(module_obj, info[0])
|
||||
for instance in mclass.__instances__():
|
||||
instance.cache(self, do_save=ituple[1])
|
||||
|
||||
def do_reload(self):
|
||||
self.do_cache()
|
||||
self.server.reload()
|
||||
self.reload_objects()
|
||||
|
||||
def cache_object(self, obj):
|
||||
obj_dict = {}
|
||||
for key, value in obj.__dict__.iteritems():
|
||||
if not callable(obj[key]):
|
||||
obj_dict[key] = value
|
||||
|
||||
self.objects_cache[obj] = obj_dict
|
||||
|
||||
def reload_objects(self):
|
||||
for obj, cache in self.objects_cache.iteritems():
|
||||
try:
|
||||
obj.reload(cache)
|
||||
except:
|
||||
functions_general.log_errmsg("Failed to reload cache for object: %s." % (obj,))
|
||||
self.failed.append(obj)
|
||||
raise
|
||||
|
||||
self.objects_cache = {}
|
||||
|
||||
for obj in self.failed:
|
||||
try:
|
||||
obj.__dict__.update(cache)
|
||||
except:
|
||||
functions_general.log_errmsg("Failed to update object %s, giving up." %s (obj,))
|
||||
raise
|
||||
|
||||
self.failed = []
|
||||
Loading…
Add table
Add a link
Reference in a new issue