diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 1bcdb7f54a9..d82f4a85775 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -35,9 +35,8 @@ from openerp.tools.translate import _ from openerp.tools import config from .. import http -openerpweb = http -from openerp.addons.web.http import request as req +from openerp.addons.web.http import request #---------------------------------------------------------- # OpenERP Web helpers @@ -87,50 +86,29 @@ def rjsmin(script): ).strip() return result -def db_list(force=False): - proxy = req.session.proxy("db") - dbs = proxy.list(force) - h = req.httprequest.environ['HTTP_HOST'].split(':')[0] - d = h.split('.')[0] - r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d) - dbs = [i for i in dbs if re.match(r, i)] - return dbs +db_list = http.db_list def db_monodb_redirect(): - db = False - redirect = False + db = db_monodb() - # 1 try the db in the url - db_url = req.params.get('db') - if db_url: - return (db_url, False) + if request.params.get('db'): + return (db, False) dbs = db_list(True) - - # 2 use the database from the cookie if it's listable and still listed - cookie_db = req.httprequest.cookies.get('last_used_database') - if cookie_db in dbs: - db = cookie_db - - # 3 use the first db if user can list databases - if dbs and not db and (config['list_db'] or len(dbs) == 1): - db = dbs[0] - # redirect to the chosen db if multiple are available + redirect = False if db and len(dbs) > 1: - query = dict(urlparse.parse_qsl(req.httprequest.query_string, keep_blank_values=True)) - query.update({'db': db}) - redirect = req.httprequest.path + '?' + urllib.urlencode(query) + query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True)) + query.update({ 'db': db }) + redirect = request.httprequest.path + '?' + urllib.urlencode(query) return (db, redirect) -def db_monodb(): - # if only one db exists, return it else return False - return db_monodb_redirect()[0] +db_monodb = http.db_monodb def redirect_with_hash(url, code=303): - if req.httprequest.user_agent.browser == 'msie': + if request.httprequest.user_agent.browser == 'msie': try: - version = float(req.httprequest.user_agent.version) + version = float(request.httprequest.user_agent.version) if version < 10: return "
" % url except Exception: @@ -183,18 +161,18 @@ def module_topological_sort(modules): def module_installed(): # Candidates module the current heuristic is the /static dir - loadable = openerpweb.addons_manifest.keys() + loadable = http.addons_manifest.keys() modules = {} # Retrieve database installed modules # TODO The following code should move to ir.module.module.list_installed_modules() - Modules = req.session.model('ir.module.module') + Modules = request.session.model('ir.module.module') domain = [('state','=','installed'), ('name','in', loadable)] for module in Modules.search_read(domain, ['name', 'dependencies_id']): modules[module['name']] = [] deps = module.get('dependencies_id') if deps: - deps_read = req.session.model('ir.module.module.dependency').read(deps, ['name']) + deps_read = request.session.model('ir.module.module.dependency').read(deps, ['name']) dependencies = [i['name'] for i in deps_read] modules[module['name']] = dependencies @@ -202,7 +180,7 @@ def module_installed(): return sorted_modules def module_installed_bypass_session(dbname): - loadable = openerpweb.addons_manifest.keys() + loadable = http.addons_manifest.keys() modules = {} try: registry = openerp.modules.registry.RegistryManager.get(dbname) @@ -228,7 +206,7 @@ def module_boot(db=None): serverside = [] dbside = [] for i in server_wide_modules: - if i in openerpweb.addons_manifest: + if i in http.addons_manifest: serverside.append(i) monodb = db or db_monodb() if monodb: @@ -315,7 +293,7 @@ def manifest_glob(extension, addons=None, db=None, include_remotes=False): addons = addons.split(',') r = [] for addon in addons: - manifest = openerpweb.addons_manifest.get(addon, None) + manifest = http.addons_manifest.get(addon, None) if not manifest: continue # ensure does not ends with / @@ -336,7 +314,7 @@ def manifest_list(extension, mods=None, db=None): db: a database name (return all installed modules in that database) """ files = manifest_glob(extension, addons=mods, db=db, include_remotes=True) - if not req.debug: + if not request.debug: path = '/web/webclient/' + extension if mods is not None: path += '?' + urllib.urlencode({'mods': mods}) @@ -381,28 +359,28 @@ def make_conditional(response, last_modified=None, etag=None): response.last_modified = last_modified if etag: response.set_etag(etag) - return response.make_conditional(req.httprequest) + return response.make_conditional(request.httprequest) def login_and_redirect(db, login, key, redirect_url='/'): - wsgienv = req.httprequest.environ + wsgienv = request.httprequest.environ env = dict( - base_location=req.httprequest.url_root.rstrip('/'), + base_location=request.httprequest.url_root.rstrip('/'), HTTP_HOST=wsgienv['HTTP_HOST'], REMOTE_ADDR=wsgienv['REMOTE_ADDR'], ) - req.session.authenticate(db, login, key, env) + request.session.authenticate(db, login, key, env) return set_cookie_and_redirect(redirect_url) def set_cookie_and_redirect(redirect_url): redirect = werkzeug.utils.redirect(redirect_url, 303) redirect.autocorrect_location_header = False - cookie_val = urllib2.quote(simplejson.dumps(req.session_id)) + cookie_val = urllib2.quote(simplejson.dumps(request.session_id)) redirect.set_cookie('instance0|session_id', cookie_val) return redirect def load_actions_from_ir_values(key, key2, models, meta): - Values = req.session.model('ir.values') - actions = Values.get(key, key2, models, meta, req.context) + Values = request.session.model('ir.values') + actions = Values.get(key, key2, models, meta, request.context) return [(id, name, clean_action(action)) for id, name, action in actions] @@ -528,8 +506,8 @@ def xml2json_from_elementtree(el, preserve_whitespaces=False): def content_disposition(filename): filename = filename.encode('utf8') escaped = urllib2.quote(filename) - browser = req.httprequest.user_agent.browser - version = int((req.httprequest.user_agent.version or '0').split('.')[0]) + browser = request.httprequest.user_agent.browser + version = int((request.httprequest.user_agent.version or '0').split('.')[0]) if browser == 'msie' and version < 9: return "attachment; filename=%s" % escaped elif browser == 'safari': @@ -568,10 +546,9 @@ html_template = """