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