[IMP] deprecate web_preload in favor of --load, server_wide_modules config option
authorAntony Lesuisse <al@openerp.com>
Fri, 30 Sep 2011 20:10:18 +0000 (22:10 +0200)
committerAntony Lesuisse <al@openerp.com>
Fri, 30 Sep 2011 20:10:18 +0000 (22:10 +0200)
bzr revid: al@openerp.com-20110930201018-aw9s26iqyd6rns05

addons/web/__init__.py
addons/web/__openerp__.py
addons/web/controllers/main.py
openerp-web.py

index dba47c9..8802cb5 100644 (file)
@@ -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
index 3fc9437..b611eb9 100644 (file)
@@ -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",
index 02371bc..9be0794 100644 (file)
@@ -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("""<!DOCTYPE html>
 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(['<script type="text/javascript" src="%s"></script>'%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(['<link rel="stylesheet" href="%s">'%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
 
index ca295d4..1a349fa 100755 (executable)
@@ -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,