diff options
| author | Antony Lesuisse <al@openerp.com> | 2012-08-13 00:29:01 +0200 |
|---|---|---|
| committer | Antony Lesuisse <al@openerp.com> | 2012-08-13 00:29:01 +0200 |
| commit | 2a7d95ac75ccb5b8161118d4ec48b3e3102001b0 (patch) | |
| tree | e19a16ffd423acfbbb4c1f4efc434e346437e898 /addons | |
| parent | 1d0c2968ce0b5589e1774d65183bcad0e9847266 (diff) | |
[IMP] load all modules at boot in single db mode
bzr revid: al@openerp.com-20120812222901-tjz9443oylidd7sy
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/web/controllers/main.py | 39 | ||||
| -rw-r--r-- | addons/web/static/src/js/boot.js | 5 |
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; } |
