X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/blobdiff_plain/3a87d3bf6e5e7525c3b381df94b4d3c1304d237b..96aecf0ad67dc02363206c7212ab8813fab5f4d3:/sercom/subcontrollers/validate.py diff --git a/sercom/subcontrollers/validate.py b/sercom/subcontrollers/validate.py index 345d92b..614619c 100644 --- a/sercom/subcontrollers/validate.py +++ b/sercom/subcontrollers/validate.py @@ -1,28 +1,54 @@ -# 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)) + 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: - 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) + +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')