[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
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
#----------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user