[FIX] page creation and retrieval to suck in a slightly different manner
authorXavier Morel <xmo@openerp.com>
Fri, 20 Sep 2013 14:20:52 +0000 (16:20 +0200)
committerXavier Morel <xmo@openerp.com>
Fri, 20 Sep 2013 14:20:52 +0000 (16:20 +0200)
Creation doesn't tack on `website.` on page names, non-namespaced
pages are looked up in the `website` module-ish.

bzr revid: xmo@openerp.com-20130920142052-jmwuqq296p1192kk

addons/website/controllers/main.py
addons/website/website.py

index a263f6e..e16bb53 100644 (file)
@@ -51,7 +51,7 @@ class Website(openerp.addons.web.controllers.main.Home):
         else:
             module = 'website'
             idname = path
-        path = "%s.%s" % (module, idname)
+        xid = "%s.%s" % (module, idname)
 
         request.cr.execute('SAVEPOINT pagenew')
         imd = request.registry['ir.model.data']
@@ -63,8 +63,8 @@ class Website(openerp.addons.web.controllers.main.Home):
         newview = view.browse(
             request.cr, request.uid, newview_id, context=request.context)
         newview.write({
-            'arch': newview.arch.replace("website.default_page", path),
-            'name': "page/%s" % path,
+            'arch': newview.arch.replace("website.default_page", xid),
+            'name': "page/%s" % xid,
             'page': True,
         })
         # Fuck it, we're doing it live
index 1302e28..28b7758 100644 (file)
@@ -97,42 +97,46 @@ class website(osv.osv):
         if values is None:
             values = {}
 
-        values.update({
-            'request': request,
-            'registry': request.registry,
-            'json': simplejson,
-            'website': request.website,
-            'res_company': request.website.company_id,
-        })
+        values.update(
+            request=request,
+            registry=request.registry,
+            json=simplejson,
+            website=request.website,
+            res_company=request.website.company_id,
+        )
 
         qweb_context.update(values)
         context = {
-            'inherit_branding': qweb_context.get('editable', False),
+            'inherit_branding': qweb_context.setdefault('editable', False),
         }
 
         # check if xmlid of the template exists
         try:
-            model, xmlid = template.split('.', 1)
-            model, id = IMD.get_object_reference(cr, uid, model, xmlid)
-        except ValueError:
-            logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
-            return self.render('website.404', qweb_context)
+            module, xmlid = template.split('.', 1)
+            IMD.get_object_reference(cr, uid, module, xmlid)
+        except ValueError: # catches both unpack errors and gor errors
+            module, xmlid = 'website', template
+            try:
+                IMD.get_object_reference(cr, uid, module, xmlid)
+            except ValueError:
+                logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
+                return self.render('website.404', qweb_context)
 
-        # render template and catch error
         try:
-            return view.render(cr, uid, template, qweb_context, context=context)
+            return view.render(cr, uid, "%s.%s" % (module, xmlid),
+                               qweb_context, context=context)
         except (AccessError, AccessDenied), err:
             logger.error(err)
             qweb_context['error'] = err[1]
             logger.warn("Website Rendering Error.\n\n%s" % traceback.format_exc())
             return self.render('website.401', qweb_context)
         except Exception:
+            logger.exception("Website Rendering Error.")
             qweb_context['traceback'] = traceback.format_exc()
-            logger.error("Website Rendering Error.\n\n%s" % qweb_context['traceback'])
-            if qweb_context['editable']:
-                return view.render(cr, uid, 'website.500', qweb_context, context=context)
-            else:
-                return view.render(cr, uid, 'website.404', qweb_context, context=context)
+            return view.render(
+                cr, uid,
+                'website.500' if qweb_context['editable'] else 'website.404',
+                qweb_context, context=context)
 
     def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None):
         # Compute Pager