summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2013-11-04 12:44:31 +0100
committerFabien Meghazi <fme@openerp.com>2013-11-04 12:44:31 +0100
commit5f2dc489b2d1a8fd4c10f32f488f4e567eb3c45b (patch)
treed3ee94754fd347fb66362f309cc95dc025ff9ad0
parentf880400e43dcbf94230401b7ffbbb34344d7e579 (diff)
parent49381094a8f00d0d5f7820315839d642edd71dab (diff)
[MERGE] upstream
bzr revid: fme@openerp.com-20131104114431-dhjp6iy1sfxq4cg1
-rw-r--r--addons/website/controllers/main.py10
-rw-r--r--addons/website/models/website.py56
-rw-r--r--addons/website/static/src/js/website.snippets.js3
-rw-r--r--addons/website/views/website_templates.xml4
4 files changed, 36 insertions, 37 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index 3167a63b0cc..a60ccdbe8cf 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -136,11 +136,8 @@ class Website(openerp.addons.web.controllers.main.Home):
values = {
'path': path,
}
- try:
- html = request.website.render(path, values)
- except ValueError:
- html = request.website.render('website.404', values)
- return html
+
+ return request.website.render(path, values)
@website.route('/website/customize_template_toggle', type='json', auth='user')
def customize_template_set(self, view_id):
@@ -281,7 +278,8 @@ class Website(openerp.addons.web.controllers.main.Home):
@website.route(['/robots.txt'], type='http', auth="public")
def robots(self):
- return request.website.render('website.robots', {'url_root': request.httprequest.url_root})
+ body = request.website.render('website.robots', {'url_root': request.httprequest.url_root})
+ return request.make_response(body, headers=[('Content-Type', 'text/plain')])
@website.route('/sitemap', type='http', auth='public', multilang=True)
def sitemap(self, **kwargs):
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index be9a0d5375b..50d5ee662aa 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -2,22 +2,24 @@
import fnmatch
import functools
import operator
+import logging
+import math
import simplejson
+import traceback
+import urllib
+from urlparse import urljoin
+
+import werkzeug
+import werkzeug.exceptions
+import werkzeug.wrappers
import openerp
+from openerp.exceptions import AccessError, AccessDenied
from openerp.osv import osv, fields
+from openerp.tools.safe_eval import safe_eval
from openerp.addons.web import http
from openerp.addons.web.http import request
-import urllib
-from urlparse import urljoin
-import math
-import traceback
-from openerp.tools.safe_eval import safe_eval
-from openerp.exceptions import AccessError, AccessDenied
-import werkzeug
-from openerp.addons.base.ir.ir_qweb import QWebException
-import logging
logger = logging.getLogger(__name__)
def route(routes, *route_args, **route_kwargs):
@@ -180,8 +182,7 @@ class website(osv.osv):
try:
view_ref = IMD.get_object_reference(cr, uid, module, xmlid)
except ValueError:
- logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
- return self.render(cr, uid, ids, 'website.404', qweb_context)
+ return self.error(cr, uid, 404, qweb_context, context=context)
if 'main_object' not in qweb_context:
try:
@@ -198,24 +199,23 @@ class website(osv.osv):
logger.error(err)
qweb_context['error'] = err[1]
logger.warn("Website Rendering Error.\n\n%s" % traceback.format_exc())
- return self.render(cr, uid, ids, 'website.401', qweb_context)
- except (QWebException,), err:
+ return self.error(cr, uid, 401, qweb_context, context=context)
+ except Exception, e:
+ qweb_context['template'] = getattr(e, 'qweb_template', '')
+ node = getattr(e, 'qweb_node', None)
+ qweb_context['node'] = node and node.toxml()
+ qweb_context['expr'] = getattr(e, 'qweb_eval', '')
qweb_context['traceback'] = traceback.format_exc()
- qweb_context['template'] = err.template
- qweb_context['message'] = err.message
- qweb_context['node'] = err.node and err.node.toxml()
- logger.error("Website Rendering Error.\n%(message)s\n%(node)s\n\n%(traceback)s" % qweb_context)
- return view.render(
- cr, uid,
- 'website.500' if qweb_context['editable'] else 'website.404',
- qweb_context, context=context)
- except Exception:
- logger.exception("Website Rendering Error.")
- qweb_context['traceback'] = traceback.format_exc()
- return view.render(
- cr, uid,
- 'website.500' if qweb_context['editable'] else 'website.404',
- qweb_context, context=context)
+ logger.exception("Website Rendering Error.\n%(template)s\n%(expr)s\n%(node)s" % qweb_context)
+ return self.error(cr, uid, 500 if qweb_context['editable'] else 404,
+ qweb_context, context=context)
+
+ def error(self, cr, uid, code, qweb_context, context=None):
+ View = request.registry['ir.ui.view']
+ return werkzeug.wrappers.Response(
+ View.render(cr, uid, 'website.%d' % code, qweb_context),
+ status=code,
+ content_type='text/html;charset=utf-8')
def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None):
# Compute Pager
diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js
index a390101fa84..41ae03ed78b 100644
--- a/addons/website/static/src/js/website.snippets.js
+++ b/addons/website/static/src/js/website.snippets.js
@@ -589,7 +589,8 @@
* Displayed into the overlay options on focus
*/
_readXMLData: function() {
- this.$el = this.parent.$snippets.siblings("[data-snippet-id='"+this.snippet_id+"']").clone();
+ var self = this;
+ this.$el = this.parent.$snippets.filter(function () { return $(this).data("snippet-id") == self.snippet_id; }).clone();
this.$editor = this.$el.find(".oe_snippet_options");
var $options = this.$overlay.find(".oe_overlay_options");
this.$editor.prependTo($options.find(".oe_options ul"));
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index 9e9d9c8be2e..6ef247738bf 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -391,8 +391,8 @@
<h1 class="container mt32">500: Internal Server Error!</h1>
</div>
<t t-if="editable">
- <h3>An exception appear in the template: <span id="exception_template" t-esc="template"/></h3>
- <b id="exception_message" t-esc="message"/>
+ <h3>Exception in template: <span id="exception_template" t-esc="template"/></h3>
+ <h4 t-if="expr">Expression: <t t-esc="expr"/></h4>
<pre id="exception_node" t-esc="node"/>
<pre id="exception_traceback" t-esc="traceback"/>
</t>