summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2012-08-13 00:29:01 +0200
committerAntony Lesuisse <al@openerp.com>2012-08-13 00:29:01 +0200
commit2a7d95ac75ccb5b8161118d4ec48b3e3102001b0 (patch)
treee19a16ffd423acfbbb4c1f4efc434e346437e898 /addons/web
parent1d0c2968ce0b5589e1774d65183bcad0e9847266 (diff)
[IMP] load all modules at boot in single db mode
bzr revid: al@openerp.com-20120812222901-tjz9443oylidd7sy
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/controllers/main.py39
-rw-r--r--addons/web/static/src/js/boot.js5
2 files changed, 41 insertions, 3 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index a90d231e471..84317d8a4f7 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -142,7 +142,9 @@ def module_installed(req):
# Candidates module the current heuristic is the /static dir
loadable = openerpweb.addons_manifest.keys()
modules = {}
+
# Retrieve database installed modules
+ # TODO The following code should move to ir.module.module.list_installed_modules()
Modules = req.session.model('ir.module.module')
domain = [('state','=','installed'), ('name','in', loadable)]
for module in Modules.search_read(domain, ['name', 'dependencies_id']):
@@ -156,11 +158,44 @@ def module_installed(req):
sorted_modules = module_topological_sort(modules)
return sorted_modules
+def module_installed_bypass_session(dbname):
+ loadable = openerpweb.addons_manifest.keys()
+ modules = {}
+ try:
+ import openerp.modules.registry
+ registry = openerp.modules.registry.RegistryManager.get(dbname)
+ cr = registry.db.cursor()
+ try:
+ m = registry.get('ir.module.module')
+ # TODO The following code should move to ir.module.module.list_installed_modules()
+ domain = [('state','=','installed'), ('name','in', loadable)]
+ ids = m.search(cr, 1, [('state','=','installed'), ('name','in', loadable)])
+ for module in m.read(cr, 1, ids, ['name', 'dependencies_id']):
+ modules[module['name']] = []
+ deps = module.get('dependencies_id')
+ if deps:
+ deps_read = registry.get('ir.module.module.dependency').read(cr, 1, deps, ['name'])
+ dependencies = [i['name'] for i in deps_read]
+ modules[module['name']] = dependencies
+ finally:
+ cr.close()
+ except Exception,e:
+ pass
+ sorted_modules = module_topological_sort(modules)
+ return sorted_modules
+
def module_boot(req):
- addons = []
+ dbs = db_list(req)
+ serverside = []
+ dbside = []
for i in req.config.server_wide_modules:
if i in openerpweb.addons_manifest:
- addons.append(i)
+ serverside.append(i)
+ if len(dbs) == 1:
+ # if only one db load every module at boot
+ dbside = module_installed_bypass_session(dbs[0])
+ dbside = [i for i in dbside if i not in serverside]
+ addons = serverside + dbside
return addons
def concat_xml(file_list):
diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js
index 844dd88a0ac..05ce709e80a 100644
--- a/addons/web/static/src/js/boot.js
+++ b/addons/web/static/src/js/boot.js
@@ -37,7 +37,10 @@
};
openerp.instances[new_instance._session_id] = new_instance;
for(var i=0; i < modules.length; i++) {
- openerp[modules[i]](new_instance,new_instance[modules[i]]);
+ new_instance[modules[i]] = {};
+ if (openerp[modules[i]]) {
+ openerp[modules[i]](new_instance,new_instance[modules[i]]);
+ }
}
return new_instance;
}