[IMP] load all modules at boot in single db mode

bzr revid: al@openerp.com-20120812222901-tjz9443oylidd7sy
This commit is contained in:
Antony Lesuisse 2012-08-13 00:29:01 +02:00
parent 1d0c2968ce
commit 2a7d95ac75
2 changed files with 41 additions and 3 deletions

View File

@ -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):

View File

@ -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;
}