summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2016-08-19 18:21:04 +0200
committerJeremy Kersten <jke@odoo.com>2016-08-19 18:31:01 +0200
commit54e4f3f96b0a93bbdee5cdffd6f671b812644a67 (patch)
tree5c4d2535c6ca4f241465e7274741e43811c32022
parentd7939282e906cd547db837770f139a6ab02f19ff (diff)
[FIX] web: allow to use content_disposable without registry
When a user connect to /web/database/manager directly without the login page before, the request don't have registry. When the user click to backup a db, a traceback was raised: return request.registry['ir.http'].content_disposition(filename) TypeError: 'NoneType' object has no attribute 'getitem' Because it was impossible to call content_diposable from ir_http without registry. Now content disposable has been moved in http.py and is callable from anywhere. This commit closes #13192 This commit closes #11583
-rw-r--r--addons/web/controllers/main.py6
-rw-r--r--openerp/addons/base/ir/ir_http.py13
-rw-r--r--openerp/http.py13
3 files changed, 16 insertions, 16 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index c6b8015267b..d3be52ff75b 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -34,7 +34,7 @@ from openerp.tools.translate import _
from openerp.tools import ustr
from openerp.tools.misc import str2bool, xlwt
from openerp import http
-from openerp.http import request, serialize_exception as _serialize_exception
+from openerp.http import request, serialize_exception as _serialize_exception, content_disposition
from openerp.exceptions import AccessError
_logger = logging.getLogger(__name__)
@@ -415,10 +415,6 @@ def xml2json_from_elementtree(el, preserve_whitespaces=False):
res["children"] = kids
return res
-def content_disposition(filename):
- return request.registry['ir.http'].content_disposition(filename)
-
-
def binary_content(xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', env=None):
return request.registry['ir.http'].binary_content(
xmlid=xmlid, model=model, id=id, field=field, unique=unique, filename=filename, filename_field=filename_field,
diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py
index 34bb0035d1a..5a423a68624 100644
--- a/openerp/addons/base/ir/ir_http.py
+++ b/openerp/addons/base/ir/ir_http.py
@@ -22,7 +22,7 @@ import openerp
import openerp.exceptions
import openerp.models
from openerp import http
-from openerp.http import request, STATIC_CACHE
+from openerp.http import request, STATIC_CACHE, content_disposition
from openerp.modules.module import get_resource_path, get_module_path
from openerp.osv import osv, orm
@@ -209,16 +209,7 @@ class ir_http(osv.AbstractModel):
return self._routing_map
def content_disposition(self, filename):
- filename = openerp.tools.ustr(filename)
- escaped = urllib2.quote(filename.encode('utf8'))
- 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' and version < 537:
- return u"attachment; filename=%s" % filename.encode('ascii', 'replace')
- else:
- return "attachment; filename*=UTF-8''%s" % escaped
+ return content_disposition(filename)
def binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', env=None):
""" Get file, attachment or downloadable content
diff --git a/openerp/http.py b/openerp/http.py
index 03e6c50fc52..81aac530d1f 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -20,6 +20,7 @@ import sys
import threading
import time
import traceback
+import urllib2
import urlparse
import warnings
from zlib import adler32
@@ -1807,6 +1808,18 @@ def send_file(filepath_or_fp, mimetype=None, as_attachment=False, filename=None,
rv.headers.pop('x-sendfile', None)
return rv
+def content_disposition(filename):
+ filename = openerp.tools.ustr(filename)
+ escaped = urllib2.quote(filename.encode('utf8'))
+ 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' and version < 537:
+ return u"attachment; filename=%s" % filename.encode('ascii', 'replace')
+ else:
+ return "attachment; filename*=UTF-8''%s" % escaped
+
#----------------------------------------------------------
# RPC controller
#----------------------------------------------------------