From 28c609d4c7a19273fb86019c10c09428af0ea800 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Thu, 14 May 2015 07:01:47 -0400 Subject: [PATCH] Hack to reset modules on subsequent uses of Django databases --- gramps/gen/dbstate.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/gramps/gen/dbstate.py b/gramps/gen/dbstate.py index 04a8e683d..069934a13 100644 --- a/gramps/gen/dbstate.py +++ b/gramps/gen/dbstate.py @@ -22,6 +22,7 @@ """ Provide the database state class """ +import sys from .db import DbReadBase from .proxy.proxybase import ProxyDbBase @@ -139,6 +140,34 @@ class DbState(Callback): pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True) pdata = pmgr.get_plugin(id) + ### FIXME: Currently Django needs to reset modules + if pdata.id == "djangodb": + if self.modules_is_set(): + self.reset_modules() + else: + self.save_modules() + mod = pmgr.load_plugin(pdata) database = getattr(mod, pdata.databaseclass) return database() + + ## FIXME: + ## Work-around for databases that need sys refresh (django): + def modules_is_set(self): + if hasattr(self, "_modules"): + return self._modules != None + else: + self._modules = None + return False + + def reset_modules(self): + # First, clear out old modules: + for key in list(sys.modules.keys()): + del(sys.modules[key]) + # Next, restore previous: + for key in self._modules: + sys.modules[key] = self._modules[key] + + def save_modules(self): + self._modules = sys.modules.copy() +