Some more correction to always have the db in the url

bzr revid: nicolas.vanhoren@openerp.com-20130724122328-kbnwq2uois37q74n
This commit is contained in:
niv-openerp 2013-07-24 14:23:28 +02:00
parent 3b384da858
commit 2205c3021f
2 changed files with 29 additions and 33 deletions

View File

@ -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 = """<!DOCTYPE html>
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('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list('js', db=db, debug=debug))
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list('css', db=db, debug=debug))

View File

@ -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):