From bfb7cb0d6e9ab34315aee2846418378810ffd3f6 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 6 Oct 2011 16:34:57 +0200 Subject: [PATCH] [FIX] compute modules list fixed bzr revid: al@openerp.com-20111006143457-i74b719vjic34ie4 --- addons/web/controllers/main.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 2946eedcbd8..c0af09a9ee1 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -315,19 +315,26 @@ class Session(openerpweb.Controller): @openerpweb.jsonrequest def modules(self, req): - if req.config.backend == 'local': - candidates = [mod for mod in openerpweb.addons_manifest.keys() - if mod not in req.config.server_wide_modules] - # if local backend, the modules are shared with the server - Modules = req.session.model('ir.module.module') - ids = Modules.search( - ['&', ('state', '=', 'installed'), ('name', 'in', candidates)] - ) - return map(operator.itemgetter('name'), Modules.read(ids, ['name'])) + # Compute available candidates module + loadable = openerpweb.addons_manifest.keys() + loaded = req.config.server_wide_modules + candidates = [mod for mod in loadable if mod not in loaded] - return [name for name, descriptor in openerpweb.addons_manifest.iteritems() - if name not in req.config.server_wide_modules - if descriptor.get('active', True)] + # Compute active true modules that might be on the web side only + active = [(name,1) for name in candidates if openerpweb.addons_manifest[name].get('active')] + print active + + # Retrieve database installed modules + module_obj = req.session.model('ir.module.module') + installed = [(i['name'],1) for i in module_obj.search_read([('state','=','installed'), ('name','in', candidates)])] + print installed + + # Merge both + merged = dict(installed) + merged.update(active) + print merged + + return merged.keys() @openerpweb.jsonrequest def eval_domain_and_context(self, req, contexts, domains,