diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 89c039b20c0..0f92d769fa2 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -88,9 +88,6 @@ def rjsmin(script):
db_list = http.db_list
-def db_monodb_redirect():
- return http.db_redirect(not config['list_db'])
-
db_monodb = http.db_monodb
def redirect_with_hash(url, code=303):
@@ -535,16 +532,21 @@ html_template = """
class Home(http.Controller):
@http.route('/', type='http', auth="none")
- def index(self, s_action=None, **kw):
- if 'db' in kw:
- ndb = kw['db']
+ def index(self, s_action=None, db=None, debug=False, **kw):
+ debug = debug != False
+ if db is not None:
lst = http.db_list(True)
- if ndb in lst and ndb != request.session.db:
+ if db in lst and db != request.session.db:
request.session.logout()
- request.session.db = ndb
+ request.session.db = db
+
+ if db != request.session.db:
+ query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True))
+ query.update({'db': request.session.db})
+ redirect = request.httprequest.path + '?' + urllib.urlencode(query)
+ return redirect_with_hash(redirect)
db = request.session.db
- debug = "debug" in kw
js = "\n ".join('' % i for i in manifest_list('js', db=db, debug=debug))
css = "\n ".join('' % i for i in manifest_list('css', db=db, debug=debug))
diff --git a/addons/web/http.py b/addons/web/http.py
index ff080787739..687af164e72 100644
--- a/addons/web/http.py
+++ b/addons/web/http.py
@@ -1057,29 +1057,6 @@ def db_list(force=False, httprequest=None):
dbs = [i for i in dbs if re.match(r, i)]
return dbs
-def db_redirect(match_first_only_if_unique, httprequest=None):
- httprequest = httprequest or request.httprequest
- db = None
- redirect = None
-
- dbs = db_list(True, httprequest)
-
- # 1 try the db in the session
- db_session = httprequest.session.db
- if db_session in dbs:
- return (db_session, None)
-
- # 2 use the first db if user can list databases
- if dbs and (not match_first_only_if_unique or len(dbs) == 1):
- db = dbs[0]
-
- # redirect to the chosen db if multiple are available
- if db and len(dbs) > 1:
- query = dict(urlparse.parse_qsl(httprequest.query_string, keep_blank_values=True))
- query.update({'db': db})
- redirect = httprequest.path + '?' + urllib.urlencode(query)
- return (db, redirect)
-
def db_monodb(httprequest=None):
"""
Magic function to find the current database.
@@ -1091,8 +1068,25 @@ def db_monodb(httprequest=None):
Returns ``None`` if the magic is not magic enough.
"""
- return db_redirect(True, httprequest=httprequest)[0]
+ httprequest = httprequest or request.httprequest
+ db = None
+ redirect = None
+ dbs = db_list(True, httprequest)
+
+ # 1 try the db already in the session
+ db_session = httprequest.session.db
+ if db_session in dbs:
+ return db_session
+
+ # 2 if there is only one db in the db filters, take it
+ if len(dbs) == 1:
+ return dbs[0]
+
+ # 3 if there are multiple dbs, take the first one only if we can list them
+ if len(dbs) > 1 and config['list_db']:
+ return dbs[0]
+ return None
class CommonController(Controller):