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,