From 7e9b43b2435668edbd58b304ef02c1171afec5a8 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Tue, 27 Feb 2007 01:00:53 +0000 Subject: [PATCH] Reporar mejor los errores en subcontrollers.validate. ADVERTENCIA: Este cambio requiere SQLObject 0.8. --- sercom/subcontrollers/validate.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/sercom/subcontrollers/validate.py b/sercom/subcontrollers/validate.py index 345d92b..e527e6e 100644 --- a/sercom/subcontrollers/validate.py +++ b/sercom/subcontrollers/validate.py @@ -1,28 +1,44 @@ -# vim: set et sw=4 sts=4 encoding=utf-8 : +# vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker : __all__ = ('validate_get', 'validate_set', 'validate_new') from turbogears import redirect, flash from cherrypy import NotFound +from sqlobject.dberrors import DuplicateEntryError +from sqlobject import SQLObjectNotFound def validate_get(cls, name, id, url='../list'): try: - return cls.get(int(id)) - except (ValueError, LookupError): + id = int(id) + except ValueError: + raise NotFound + try: + return cls.get(id) + except SQLObjectNotFound: raise NotFound def validate_set(cls, name, id, data, url='../edit'): r = validate_get(cls, name, id) try: r.set(**data) - except Exception, e: - flash(_(u'No se pudo modificar el %s (error: %s).') % (name, e)) + except DuplicateEntryError, e: + flash(_(u'No se pudo modificar el %s porque no es único (error: %s).') + % (name, e)) + raise redirect('%s/%s' % (url, id), **data) + except TypeError, e: + flash(_(u'No se pudo modificar el %s porque falta un dato o es ' + u'inválido (error: %s).') % (name, e)) raise redirect('%s/%s' % (url, id), **data) def validate_new(cls, name, data, url='new'): try: return cls(**data) - except Exception, e: - flash(_(u'No se pudo crear el nuevo %s (error: %s).') % (name, e)) + except DuplicateEntryError, e: + flash(_(u'No se pudo crear el %s porque no es único (error: %s).') + % (name, e)) + raise redirect(url, **data) + except TypeError, e: + flash(_(u'No se pudo crear el %s porque falta un dato o es ' + u'inválido (error: %s).') % (name, e)) raise redirect(url, **data) -- 2.43.0