[FIX] correctly rollback savepoint in new_page

bzr revid: xmo@openerp.com-20131126102321-35wmxcncl3pp4mhw
This commit is contained in:
Xavier Morel
2013-11-26 11:23:21 +01:00
parent c948374f06
commit 6fc69e33d4
2 changed files with 21 additions and 18 deletions
-1
View File
@@ -53,7 +53,6 @@ class Website(openerp.addons.web.controllers.main.Home):
path = web.new_page(request.cr, request.uid, path, context=request.context)
except psycopg2.IntegrityError:
logger.exception('Unable to create ir_model_data for page %s', path)
request.cr.execute('ROLLBACK TO SAVEPOINT pagenew')
return werkzeug.exceptions.InternalServerError()
url = "/page/" + path
if noredirect is not NOPE:
+21 -17
View File
@@ -115,29 +115,33 @@ class website(osv.osv):
# completely arbitrary max_length
idname = slugify(name, max_length=50)
cr.execute('SAVEPOINT pagenew')
imd = self.pool.get('ir.model.data')
view = self.pool.get('ir.ui.view')
module, tmp_page = template.split('.')
view_model, view_id = imd.get_object_reference(cr, uid, module, tmp_page)
newview_id = view.copy(cr, uid, view_id, context=context)
newview = view.browse(cr, uid, newview_id, context=context)
newview.write({
'arch': newview.arch.replace(template, "%s.%s" % (module, idname)),
'name': name,
'page': ispage,
})
imd.create(cr, uid, {
'name': idname,
'module': module,
'model': 'ir.ui.view',
'res_id': newview_id,
'noupdate': True
}, context=context)
cr.execute('RELEASE SAVEPOINT pagenew')
return "%s.%s" % (module, idname)
cr.execute('SAVEPOINT new_page')
try:
newview_id = view.copy(cr, uid, view_id, context=context)
newview = view.browse(cr, uid, newview_id, context=context)
newview.write({
'arch': newview.arch.replace(template, "%s.%s" % (module, idname)),
'name': name,
'page': ispage,
})
imd.create(cr, uid, {
'name': idname,
'module': module,
'model': 'ir.ui.view',
'res_id': newview_id,
'noupdate': True
}, context=context)
cr.execute('RELEASE SAVEPOINT new_page')
return "%s.%s" % (module, idname)
except:
cr.execute("ROLLBACK TO SAVEPOINT new_page")
raise
def get_public_user(self, cr, uid, context=None):
if not self.public_user: