Hack to reset modules on subsequent uses of Django databases
This commit is contained in:
parent
ca88f37bb6
commit
28c609d4c7
@ -22,6 +22,7 @@
|
|||||||
"""
|
"""
|
||||||
Provide the database state class
|
Provide the database state class
|
||||||
"""
|
"""
|
||||||
|
import sys
|
||||||
|
|
||||||
from .db import DbReadBase
|
from .db import DbReadBase
|
||||||
from .proxy.proxybase import ProxyDbBase
|
from .proxy.proxybase import ProxyDbBase
|
||||||
@ -139,6 +140,34 @@ class DbState(Callback):
|
|||||||
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
|
pmgr.reg_plugins(USER_PLUGINS, self, None, load_on_reg=True)
|
||||||
pdata = pmgr.get_plugin(id)
|
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)
|
mod = pmgr.load_plugin(pdata)
|
||||||
database = getattr(mod, pdata.databaseclass)
|
database = getattr(mod, pdata.databaseclass)
|
||||||
return database()
|
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()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user