Olivier Dony (OpenERP) has proposed merging 
lp:~openerp-dev/openerp-web/trunk-monodb-by-param-odo into lp:openerp-web.

Requested reviews:
  OpenERP R&D Web Team (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-monodb-by-param-odo/+merge/134966

monodb bootstrap: support `db` query string param to force monodb mode

Allows a.o. to let auth_signup URLs works even if multiple DBs exist, just by 
adding ?db=xxx in the query string.
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-monodb-by-param-odo/+merge/134966
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/trunk-monodb-by-param-odo.
=== modified file 'addons/web/controllers/main.py'
--- addons/web/controllers/main.py	2012-11-16 13:58:22 +0000
+++ addons/web/controllers/main.py	2012-11-19 16:52:38 +0000
@@ -82,7 +82,6 @@
     return result
 
 def db_list(req):
-    dbs = []
     proxy = req.session.proxy("db")
     dbs = proxy.list()
     h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
@@ -92,7 +91,7 @@
     return dbs
 
 def db_monodb(req):
-    # if only one db is listed returns it else return False
+    # if only one db exists, return it else return False
     try:
         dbs = db_list(req)
         if len(dbs) == 1:
@@ -189,14 +188,14 @@
     sorted_modules = module_topological_sort(modules)
     return sorted_modules
 
-def module_boot(req):
+def module_boot(req, db=None):
     server_wide_modules = openerp.conf.server_wide_modules or ['web']
     serverside = []
     dbside = []
     for i in server_wide_modules:
         if i in openerpweb.addons_manifest:
             serverside.append(i)
-    monodb = db_monodb(req)
+    monodb = db or db_monodb(req)
     if monodb:
         dbside = module_installed_bypass_session(monodb)
         dbside = [i for i in dbside if i not in serverside]
@@ -273,9 +272,9 @@
     """convert FS path into web path"""
     return '/'.join(path.split(os.path.sep))
 
-def manifest_glob(req, addons, key):
+def manifest_glob(req, extension, addons=None, db=None):
     if addons is None:
-        addons = module_boot(req)
+        addons = module_boot(req, db=db)
     else:
         addons = addons.split(',')
     r = []
@@ -285,19 +284,21 @@
             continue
         # ensure does not ends with /
         addons_path = os.path.join(manifest['addons_path'], '')[:-1]
-        globlist = manifest.get(key, [])
+        globlist = manifest.get(extension, [])
         for pattern in globlist:
             for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))):
                 r.append((path, fs2web(path[len(addons_path):])))
     return r
 
-def manifest_list(req, mods, extension):
+def manifest_list(req, extension, mods=None, db=None):
     if not req.debug:
         path = '/web/webclient/' + extension
         if mods is not None:
             path += '?mods=' + mods
+        elif db:
+            path += '?db=' + db
         return [path]
-    files = manifest_glob(req, mods, extension)
+    files = manifest_glob(req, extension, addons=mods, db=db)
     i_am_diabetic = req.httprequest.environ["QUERY_STRING"].count("no_sugar") >= 1 or \
                     req.httprequest.environ.get('HTTP_REFERER', '').count("no_sugar") >= 1
     if i_am_diabetic:
@@ -598,14 +599,14 @@
     _cp_path = '/'
 
     @openerpweb.httprequest
-    def index(self, req, s_action=None, **kw):
-        js = "\n        ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, None, 'js'))
-        css = "\n        ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, None, 'css'))
+    def index(self, req, s_action=None, db=None, **kw):
+        js = "\n        ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list(req, 'js', db=db))
+        css = "\n        ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list(req, 'css', db=db))
 
         r = html_template % {
             'js': js,
             'css': css,
-            'modules': simplejson.dumps(module_boot(req)),
+            'modules': simplejson.dumps(module_boot(req, db=db)),
             'init': 'var wc = new s.web.WebClient();wc.appendTo($(document.body));'
         }
         return r
@@ -619,19 +620,19 @@
 
     @openerpweb.jsonrequest
     def csslist(self, req, mods=None):
-        return manifest_list(req, mods, 'css')
+        return manifest_list(req, 'css', mods=mods)
 
     @openerpweb.jsonrequest
     def jslist(self, req, mods=None):
-        return manifest_list(req, mods, 'js')
+        return manifest_list(req, 'js', mods=mods)
 
     @openerpweb.jsonrequest
     def qweblist(self, req, mods=None):
-        return manifest_list(req, mods, 'qweb')
+        return manifest_list(req, 'qweb', mods=mods)
 
     @openerpweb.httprequest
-    def css(self, req, mods=None):
-        files = list(manifest_glob(req, mods, 'css'))
+    def css(self, req, mods=None, db=None):
+        files = list(manifest_glob(req, 'css', addons=mods, db=db))
         last_modified = get_last_modified(f[0] for f in files)
         if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
             return werkzeug.wrappers.Response(status=304)
@@ -669,8 +670,8 @@
             last_modified, checksum)
 
     @openerpweb.httprequest
-    def js(self, req, mods=None):
-        files = [f[0] for f in manifest_glob(req, mods, 'js')]
+    def js(self, req, mods=None, db=None):
+        files = [f[0] for f in manifest_glob(req, 'js', addons=mods, db=db)]
         last_modified = get_last_modified(files)
         if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
             return werkzeug.wrappers.Response(status=304)
@@ -682,8 +683,8 @@
             last_modified, checksum)
 
     @openerpweb.httprequest
-    def qweb(self, req, mods=None):
-        files = [f[0] for f in manifest_glob(req, mods, 'qweb')]
+    def qweb(self, req, mods=None, db=None):
+        files = [f[0] for f in manifest_glob(req, 'qweb', addons=mods, db=db)]
         last_modified = get_last_modified(files)
         if req.httprequest.if_modified_since and req.httprequest.if_modified_since >= last_modified:
             return werkzeug.wrappers.Response(status=304)

=== modified file 'addons/web/static/src/js/chrome.js'
--- addons/web/static/src/js/chrome.js	2012-11-19 10:07:34 +0000
+++ addons/web/static/src/js/chrome.js	2012-11-19 16:52:38 +0000
@@ -566,12 +566,18 @@
             self.do_action("database_manager");
         });
         var d;
-        if (self.params.db) {
-            if (self.params.login && self.params.password) {
-                d = self.do_login(self.params.db, self.params.login, self.params.password);
+        if ($.deparam.querystring().db) {
+            self.params.db = $.deparam.querystring().db;
+        }
+        // used by dbmanager.do_create via internal client action
+        if (self.params.db && self.params.login && self.params.password) {
+            d = self.do_login(self.params.db, self.params.login, self.params.password);
+        } else {
+            if (self.params.db) {
+                self.on_db_loaded([self.params.db])
+            } else {
+                d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed);
             }
-        } else {
-            d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed);
         }
         return d;
     },

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : openerp-dev-gtk@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to