From 667d96ff0cdf596a9826df30b3e449a2a9d1a141 Mon Sep 17 00:00:00 2001
From: Christophe Matthieu
Date: Mon, 26 Aug 2013 12:16:15 +0200
Subject: [PATCH] [FIX] website: catch and dispatch error for rendering
bzr revid: chm@openerp.com-20130826101615-t1ouij4flhtdthxe
---
addons/website/views/views.xml | 4 +--
addons/website/website.py | 34 +++++++++++++------
addons/website_contract/controllers/main.py | 5 +--
.../views/website_contract.xml | 2 +-
addons/website_contract/website_contract.py | 2 +-
5 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/addons/website/views/views.xml b/addons/website/views/views.xml
index b9cbe035d3d..0e3314ca97f 100644
--- a/addons/website/views/views.xml
+++ b/addons/website/views/views.xml
@@ -292,7 +292,7 @@
500: Internal Server Error!
-
+
@@ -308,7 +308,7 @@
Maybe you were looking for one of these
popular pages ?
-
+
- Homepage
- Contact Us
diff --git a/addons/website/website.py b/addons/website/website.py
index d1b338f064a..352cf921d72 100644
--- a/addons/website/website.py
+++ b/addons/website/website.py
@@ -10,6 +10,7 @@ import urllib
import math
import traceback
from openerp.tools.safe_eval import safe_eval
+from openerp.exceptions import AccessError, AccessDenied
import logging
logger = logging.getLogger(__name__)
@@ -72,25 +73,36 @@ class website(osv.osv):
values.update(additional_values)
return values
- def render(self, template, values={}):
+ def render(self, template, values=None):
view = request.registry.get("ir.ui.view")
+ IMD = request.registry.get("ir.model.data")
+
+ if not values:
+ values = {}
context = {
'inherit_branding': values.get('editable', False),
}
+
+ # check if xmlid of the template exists
+ try:
+ model, xmlid = template.split('.')
+ model, id = IMD.get_object_reference(request.cr, request.uid, model, xmlid)
+ except ValueError:
+ logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
+ return self.render('website.404', values)
+
+ # render template and catch error
try:
return view.render(request.cr, request.uid, template, values, context=context)
- # except (osv.except_osv, orm.except_orm), err:
- # logger.error(err)
- # values['error'] = err[1]
- # return self.render('website.401', values)
- # except ValueError:
- # logger.error("Website Rendering Error.\n\n%s" % (traceback.format_exc()))
- # return self.render('website.404', values)
+ except (AccessError, AccessDenied), err:
+ logger.error(err)
+ values['error'] = err[1]
+ logger.warn("Website Rendering Error.\n\n%s" % traceback.format_exc())
+ return self.render('website.401', values)
except Exception:
- trace = traceback.format_exc()
- logger.error("Website Rendering Error.\n\n%s" % trace)
+ values['traceback'] = traceback.format_exc()
+ logger.error("Website Rendering Error.\n\n%s" % values['traceback'])
if values['editable']:
- values['traceback'] = trace
return view.render(request.cr, request.uid, 'website.500', values, context=context)
else:
return view.render(request.cr, request.uid, 'website.404', values, context=context)
diff --git a/addons/website_contract/controllers/main.py b/addons/website_contract/controllers/main.py
index 5485fce5f7d..f1349b2c142 100644
--- a/addons/website_contract/controllers/main.py
+++ b/addons/website_contract/controllers/main.py
@@ -32,7 +32,7 @@ class website_contract(http.Controller):
step = 20
pager = website.pager(url="/references/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
- partner_ids = partner_obj.search(request.cr, request.uid, [('id', 'in', partner_ids)], limit=step, offset=pager['offset'])
+ partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)], limit=step, offset=pager['offset'])
values = website.get_rendering_context({
'partner_ids': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids),
@@ -45,8 +45,9 @@ class website_contract(http.Controller):
def references_ref(self, ref_id=0, **post):
website = request.registry['website']
partner_obj = request.registry['res.partner']
+ partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)])
values = website.get_rendering_context({
- 'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, ref_id, context={'show_address': True}),
+ 'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids[0], context={'show_address': True}),
})
return website.render("website_contract.details", values)
diff --git a/addons/website_contract/views/website_contract.xml b/addons/website_contract/views/website_contract.xml
index a8ef26000bf..2c036ef870e 100644
--- a/addons/website_contract/views/website_contract.xml
+++ b/addons/website_contract/views/website_contract.xml
@@ -48,7 +48,7 @@
diff --git a/addons/website_contract/website_contract.py b/addons/website_contract/website_contract.py
index 10d12f08015..1eab700456d 100644
--- a/addons/website_contract/website_contract.py
+++ b/addons/website_contract/website_contract.py
@@ -7,7 +7,7 @@ class res_partner(osv.osv):
_columns = {
'website_published': fields.boolean('Available in the website'),
'website_description': fields.html('Description for the website'),
- 'website_sort_description': fields.text('Sort description for the website'),
+ 'website_short_description': fields.text('Sort description for the website'),
}
def img(self, cr, uid, ids, field='image_small', context=None):