From d66a1ca3482015449e9a08c6bda135da10d3f2ba Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 23 May 2011 16:52:19 +0200 Subject: [PATCH] [IMP] Moved binary controllers from FormView class to new Binary class bzr revid: fme@openerp.com-20110523145219-0nwzvkm94bm5liag --- addons/base/controllers/main.py | 120 ++++++++++++++-------------- addons/base/static/src/js/form.js | 4 +- addons/base/static/src/xml/base.xml | 4 +- 3 files changed, 65 insertions(+), 63 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 9ce3c0f58e8..29bb2c97638 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -555,63 +555,6 @@ class FormView(View): fields_view = self.fields_view_get(req, model, view_id, 'form', toolbar=toolbar) return {'fields_view': fields_view} - @openerpweb.httprequest - def image(self, request, session_id, model, id, field, **kw): - cherrypy.response.headers['Content-Type'] = 'image/png' - Model = request.session.model(model) - try: - if not id: - res = Model.default_get([field], request.context).get(field, '') - else: - res = Model.read([int(id)], [field], request.context)[0].get(field, '') - return base64.decodestring(res) - except: # TODO: what's the exception here? - return self.placeholder() - def placeholder(self): - return open(os.path.join(openerpweb.path_addons, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() - - @openerpweb.httprequest - def saveas(self, request, session_id, model, id, field, fieldname, **kw): - Model = request.session.model(model) - res = Model.read([int(id)], [field, fieldname])[0] - filecontent = res.get(field, '') - if not filecontent: - raise cherrypy.NotFound - else: - cherrypy.response.headers['Content-Type'] = 'application/octet-stream' - filename = '%s_%s' % (model.replace('.', '_'), id) - if fieldname: - filename = res.get(fieldname, '') or filename - cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=' + filename - return base64.decodestring(filecontent) - - @openerpweb.httprequest - def upload(self, request, session_id, callback, ufile=None): - cherrypy.response.timeout = 500 - headers = {} - for key, val in cherrypy.request.headers.iteritems(): - headers[key.lower()] = val - size = int(headers.get('content-length', 0)) - # TODO: might be usefull to have a configuration flag for max-lenght file uploads - try: - out = """""" - data = ufile.file.read() - args = [size, ufile.filename, ufile.headers.getheader('Content-Type'), base64.encodestring(data)] - except Exception, e: - args = [False, e.message] - return out % (simplejson.dumps(callback), simplejson.dumps(args)) - class ListView(View): _cp_path = "/base/listview" @@ -704,7 +647,6 @@ class ListView(View): return color[0] return 'maroon' - class SearchView(View): _cp_path = "/base/searchview" @@ -712,13 +654,73 @@ class SearchView(View): def load(self, req, model, view_id): fields_view = self.fields_view_get(req, model, view_id, 'search') return {'fields_view': fields_view} - + @openerpweb.jsonrequest def fields_get(self, req, model): Model = req.session.model(model) fields = Model.fields_get() return {'fields': fields} +class Binary(openerpweb.Controller): + _cp_path = "/base/binary" + + @openerpweb.httprequest + def image(self, request, session_id, model, id, field, **kw): + cherrypy.response.headers['Content-Type'] = 'image/png' + Model = request.session.model(model) + try: + if not id: + res = Model.default_get([field], request.context).get(field, '') + else: + res = Model.read([int(id)], [field], request.context)[0].get(field, '') + return base64.decodestring(res) + except: # TODO: what's the exception here? + return self.placeholder() + def placeholder(self): + return open(os.path.join(openerpweb.path_addons, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() + + @openerpweb.httprequest + def saveas(self, request, session_id, model, id, field, fieldname, **kw): + Model = request.session.model(model) + res = Model.read([int(id)], [field, fieldname])[0] + filecontent = res.get(field, '') + if not filecontent: + raise cherrypy.NotFound + else: + cherrypy.response.headers['Content-Type'] = 'application/octet-stream' + filename = '%s_%s' % (model.replace('.', '_'), id) + if fieldname: + filename = res.get(fieldname, '') or filename + cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=' + filename + return base64.decodestring(filecontent) + + @openerpweb.httprequest + def upload(self, request, session_id, callback, ufile=None): + cherrypy.response.timeout = 500 + headers = {} + for key, val in cherrypy.request.headers.iteritems(): + headers[key.lower()] = val + size = int(headers.get('content-length', 0)) + # TODO: might be usefull to have a configuration flag for max-lenght file uploads + try: + out = """""" + data = ufile.file.read() + args = [size, ufile.filename, ufile.headers.getheader('Content-Type'), base64.encodestring(data)] + except Exception, e: + args = [False, e.message] + return out % (simplejson.dumps(callback), simplejson.dumps(args)) + class Action(openerpweb.Controller): _cp_path = "/base/action" diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 00f9db75469..b33b7112c9a 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1255,7 +1255,7 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({ on_file_uploaded_and_valid: function(size, name, content_type, file_base64) { }, on_save_as: function() { - var url = '/base/formview/saveas?session_id=' + this.session.session_id + '&model=' + + var url = '/base/binary/saveas?session_id=' + this.session.session_id + '&model=' + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime()) window.open(url); @@ -1329,7 +1329,7 @@ openerp.base.form.FieldBinaryImage = openerp.base.form.FieldBinary.extend({ set_value: function(value) { this._super.apply(this, arguments); this.set_image_maxwidth(); - var url = '/base/formview/image?session_id=' + this.session.session_id + '&model=' + + var url = '/base/binary/image?session_id=' + this.session.session_id + '&model=' + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + '&t=' + (new Date().getTime()) this.$image.attr('src', url); } diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index ebe977742f5..d25a5a4415e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -421,7 +421,7 @@
+ method="post" enctype="multipart/form-data" action="/base/binary/upload">