]> git.llucax.com Git - software/sercom.git/blob - sercom/subcontrollers/validate.py
e527e6ea51b2aa868ce9d368dfe21b608f30efee
[software/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     except DuplicateEntryError, e:
25         flash(_(u'No se pudo modificar el %s porque no es único (error: %s).')
26             % (name, e))
27         raise redirect('%s/%s' % (url, id), **data)
28     except TypeError, e:
29         flash(_(u'No se pudo modificar el %s porque falta un dato o es '
30             u'inválido (error: %s).') % (name, e))
31         raise redirect('%s/%s' % (url, id), **data)
32
33 def validate_new(cls, name, data, url='new'):
34     try:
35         return cls(**data)
36     except DuplicateEntryError, e:
37         flash(_(u'No se pudo crear el %s porque no es único (error: %s).')
38             % (name, e))
39         raise redirect(url, **data)
40     except TypeError, e:
41         flash(_(u'No se pudo crear el %s porque falta un dato o es '
42             u'inválido (error: %s).') % (name, e))
43         raise redirect(url, **data)
44