diff --git a/addons/web/__init__.py b/addons/web/__init__.py index dba47c9f45e..8802cb548c3 100644 --- a/addons/web/__init__.py +++ b/addons/web/__init__.py @@ -16,6 +16,7 @@ def wsgi_postload(): _logger.info("embedded mode") o = Options() o.dbfilter = openerp.tools.config['dbfilter'] + o.server_wide_modules = openerp.conf.server_wide_modules or ['web'] o.session_storage = os.path.join(tempfile.gettempdir(), "oe-sessions") o.addons_path = openerp.modules.module.ad_paths o.serve_static = True diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 3fc9437822d..b611eb91eb5 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -3,7 +3,6 @@ "depends" : [], 'active': True, 'post_load' : 'wsgi_postload', - 'web_preload' : True, 'js' : [ "static/lib/datejs/globalization/en-US.js", "static/lib/datejs/core.js", diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 02371bc8fb3..9be0794a8bb 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -68,29 +68,6 @@ class Xml2Json: # OpenERP Web web Controllers #---------------------------------------------------------- -def manifest_preload(): - modules = [k for k,v in openerpweb.addons_manifest.items() if v.get('web_preload')] - return modules - -def manifest_addons(addons): - if addons==None: - addons = manifest_preload() - else: - addons = addons.split(',') - return addons - -def manifest_glob(addons, key): - addons = manifest_addons(addons) - files = [] - for addon in addons: - manifest = openerpweb.addons_manifest.get(addon, {}) - addons_path = manifest['addons_path'] - globlist = manifest.get(key, []) - for pattern in globlist: - for path in glob.glob(os.path.join(addons_path, addon, pattern)): - files.append(path[len(addons_path):]) - return files - # TODO change into concat_file(addons,key) taking care of addons_path def concat_files(addons_path, file_list): """ Concatenate file content @@ -131,24 +108,45 @@ home_template = textwrap.dedent(""" class WebClient(openerpweb.Controller): _cp_path = "/web/webclient" + def server_wide_modules(self, req): + addons = [i for i in req.config.server_wide_modules if i in openerpweb.addons_manifest] + return addons + + def manifest_glob(self, req, addons, key): + if addons==None: + addons = self.server_wide_modules(req) + else: + addons = addons.split(',') + files = [] + for addon in addons: + manifest = openerpweb.addons_manifest.get(addon, None) + if not manifest: + continue + addons_path = manifest['addons_path'] + globlist = manifest.get(key, []) + for pattern in globlist: + for path in glob.glob(os.path.join(addons_path, addon, pattern)): + files.append(path[len(addons_path):]) + return files + @openerpweb.jsonrequest def csslist(self, req, mods=None): - return manifest_glob(mods, 'css') + return self.manifest_glob(req, mods, 'css') @openerpweb.jsonrequest def jslist(self, req, mods=None): - return manifest_glob(mods, 'js') + return self.manifest_glob(req, mods, 'js') @openerpweb.httprequest def css(self, req, mods=None): - files = manifest_glob(mods, 'css') + files = self.manifest_glob(req, mods, 'css') content,timestamp = concat_files(req.config.addons_path, files) # TODO request set the Date of last modif and Etag return req.make_response(content, [('Content-Type', 'text/css')]) @openerpweb.httprequest def js(self, req, mods=None): - files = manifest_glob(mods, 'js') + files = self.manifest_glob(req, mods, 'js') content,timestamp = concat_files(req.config.addons_path, files) # TODO request set the Date of last modif and Etag return req.make_response(content, [('Content-Type', 'application/javascript')]) @@ -158,19 +156,19 @@ class WebClient(openerpweb.Controller): # script tags jslist = ['/web/webclient/js'] if req.debug: - jslist = [i + '?debug=' + str(time.time()) for i in manifest_glob(None, 'js')] + jslist = [i + '?debug=' + str(time.time()) for i in self.manifest_glob(req, None, 'js')] js = "\n ".join([''%i for i in jslist]) # css tags csslist = ['/web/webclient/css'] if req.debug: - csslist = [i + '?debug=' + str(time.time()) for i in manifest_glob(None, 'css')] + csslist = [i + '?debug=' + str(time.time()) for i in self.manifest_glob(req, None, 'css')] css = "\n ".join([''%i for i in csslist]) r = home_template % { 'javascript': js, 'css': css, - 'modules': simplejson.dumps(manifest_preload()), + 'modules': simplejson.dumps(self.server_wide_modules(req)), } return r @@ -364,7 +362,7 @@ class Session(openerpweb.Controller): mods = [] for name, manifest in openerpweb.addons_manifest.items(): # TODO replace by ir.module.module installed web - if not manifest.get('web_preload') and manifest.get('active', True): + if name not in req.config.server_wide_modules and manifest.get('active', True): mods.append(name) return mods diff --git a/openerp-web.py b/openerp-web.py index ca295d4d9ff..1a349fa601c 100755 --- a/openerp-web.py +++ b/openerp-web.py @@ -27,6 +27,8 @@ optparser.add_option("--db-filter", dest="dbfilter", default='.*', help="Filter listed database", metavar="REGEXP") optparser.add_option('--addons-path', dest='addons_path', default=[path_addons], action='append', help="Path do addons directory", metavar="PATH") +optparser.add_option('--load', dest='server_wide_modules', default=['web'], action='append', + help="Load a additional module before login (by default only 'web' is loaded)", metavar="MODULE") server_options = optparse.OptionGroup(optparser, "Server configuration") server_options.add_option("-p", "--port", dest="socket_port", default=8002,