X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/59972c6fd03ea093bd26eca762a7f4fa5a1320dd..0b7fa756174b1d0014b030c0152e0be7f23c4fd4:/sercom/subcontrollers/validate.py?ds=sidebyside diff --git a/sercom/subcontrollers/validate.py b/sercom/subcontrollers/validate.py index 67b749a..9b4a96a 100644 --- a/sercom/subcontrollers/validate.py +++ b/sercom/subcontrollers/validate.py @@ -1,32 +1,53 @@ -# 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 +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: id = int(id) except ValueError: - raise redirect(url, tg_flash=_(u'Identificador inválido: %s.') % id) + raise NotFound try: return cls.get(id) - except LookupError: - raise redirect(url, tg_flash=_(u'No existe %s con identificador %d') - % (name, 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: - raise redirect('%s/%s' % (url, id), tg_flash=_(u'No se pudo ' \ - 'modificar el %s (error: %s).') % (name, e), **data) + return r + 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: - raise redirect(url, tg_flash=_(u'No se pudo crear el nuevo %s ' \ - '(error: %s).') % (name, e), **data) + 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) +def validate_del(cls, name, id): + try: + id = int(id) + r = validate_get(cls, name, id) + r.destroySelf() + except Exception, e: + flash(_(u'No se pudo eliminar el %s: %s' % (name, e))) + raise redirect('../list')