]> git.llucax.com Git - z.facultad/75.52/sercom.git/blob - sercom/subcontrollers/validate.py
Bugfix: se rompía el edit de Enunciado cuando había un archivo.
[z.facultad/75.52/sercom.git] / sercom / subcontrollers / validate.py
1 # vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
2
3 __all__ = ('validate_get', 'validate_set', 'validate_new')
4
5 from turbogears import redirect, flash
6 from cherrypy import NotFound
7 from sqlobject.dberrors import DuplicateEntryError
8 from sqlobject import SQLObjectNotFound
9
10 def validate_get(cls, name, id, url='../list'):
11     try:
12         id = int(id)
13     except ValueError:
14         raise NotFound
15     try:
16         return cls.get(id)
17     except SQLObjectNotFound:
18         raise NotFound
19
20 def validate_set(cls, name, id, data, url='../edit'):
21     r = validate_get(cls, name, id)
22     try:
23         r.set(**data)
24         return r
25     except DuplicateEntryError, e:
26         flash(_(u'No se pudo modificar el %s porque no es único (error: %s).')
27             % (name, e))
28         raise redirect('%s/%s' % (url, id), **data)
29     except TypeError, e:
30         flash(_(u'No se pudo modificar el %s porque falta un dato o es '
31             u'inválido (error: %s).') % (name, e))
32         raise redirect('%s/%s' % (url, id), **data)
33
34 def validate_new(cls, name, data, url='new'):
35     try:
36         return cls(**data)
37     except DuplicateEntryError, e:
38         flash(_(u'No se pudo crear el %s porque no es único (error: %s).')
39             % (name, e))
40         raise redirect(url, **data)
41     except TypeError, e:
42         flash(_(u'No se pudo crear el %s porque falta un dato o es '
43             u'inválido (error: %s).') % (name, e))
44         raise redirect(url, **data)
45
46 def validate_del(cls, name, id):
47     try:
48         id = int(id)
49         r = validate_get(cls, name, id)
50         r.destroySelf()
51     except Exception, e:
52         flash(_(u'No se pudo eliminar el %s: %s' % (name, e)))
53         raise redirect('../list')
54