]> git.llucax.com Git - software/sercom.git/commitdiff
Reutilizar validación de ID y existencia de objetos.
authorLeandro Lucarella <llucax@gmail.com>
Sat, 10 Feb 2007 00:36:26 +0000 (00:36 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 10 Feb 2007 00:36:26 +0000 (00:36 +0000)
Se mueve la parte de validación de id y de existencia de SQLObjects al módulo
validate de subcontrollers. De esta forma se puede reutilizar esta validación en
otros controladores. En el controlador de docentes se 'bindean' las funciones
con los parámetros de clase y nombre para que sea más simple el uso (tipo
aplicación parcial :).

sercom/subcontrollers/docente/__init__.py
sercom/subcontrollers/validate.py [new file with mode: 0644]

index 721ec34613d8ab90fc2c0886478582d0a6f26d35..c93184d44464e7ce9d8eb9591df8a92e6ae852f4 100644 (file)
@@ -7,14 +7,19 @@ from turbogears.widgets import *
 from turbogears import identity
 from turbogears import paginate
 from docutils.core import publish_parts
+from sercom.subcontrollers import validate as val
 
 cls = Docente
 name = 'docente'
 namepl = name + 's'
 
+def validate_get(id): return val.validate_get(cls, name, id)
+def validate_set(id, data): return val.validate_set(cls, name, id, data)
+def validate_new(data): return val.validate_new(cls, name, data)
+
 form = TableForm(fields=[
     TextField(name='usuario', label=_(u'Usuario'),
-        help_text=_(u'Requerido.'),
+        help_text=_(u'Requerido y único.'),
         validator=validators.UnicodeString(min=3, max=10, strip=True)),
     TextField(name='nombre', label=_(u'Nombre'),
         help_text=_(u'Requerido.'),
@@ -57,26 +62,16 @@ class DocenteController(controllers.Controller, identity.SecureResource):
         """List records in model"""
         f = kw.get('tg_flash', None)
         r = cls.select()
-
         return dict(records=r, name=name, namepl=namepl, tg_flash=f)
 
     @expose()
     def activate(self, id, activo):
         """Save or create record to model"""
+        r = validate_get(id)
         try:
-            id = int(id)
-        except ValueError:
-            raise redirect('../list',
-                tg_flash=_(u'Identificador inválido: %s.') % id)
-
-        try:
-            r = cls.get(id)
-        except LookupError:
-            f = _(u'No existe el %s con identificador %d.') % (name, id)
-            raise redirect('../list', tg_flash=f)
-
-        r.activo = bool(int(activo))
-
+            r.activo = bool(int(activo))
+        except ValueError, e:
+            raise redirect('../list', tg_flash=_(u'Acción inválida.'))
         raise redirect('../list')
 
     @expose(template='kid:sercom.subcontrollers.%s.templates.new' % name)
@@ -90,97 +85,37 @@ class DocenteController(controllers.Controller, identity.SecureResource):
     @expose()
     def create(self, **kw):
         """Save or create record to model"""
-        try:
-            cls(**kw)
-        except Exception, e:
-            raise redirect('new', tg_flash=_(u'No se pudo crear el nuevo %s, ' \
-                'probablemente ya existe uno con el mismo usuario (error: %s).'
-                    % (name, e)), **kw)
-
+        validate_new(kw)
         raise redirect('list', tg_flash=_(u'Se creó un nuevo %s.') % name)
 
     @expose(template='kid:sercom.subcontrollers.%s.templates.edit' % name)
     def edit(self, id, **kw):
         """Edit record in model"""
-        try:
-            id = int(id)
-        except ValueError:
-            raise redirect('../list',
-                tg_flash=_(u'Identificador inválido: %s.') % id)
-
-        f = kw.get('tg_flash', None)
-        try:
-            r = cls.get(id)
-        except LookupError:
-            f = _(u'No existe el %s con identificador %d.') % (name, id)
-            raise redirect('../list', tg_flash=f)
-
-        return dict(name=name, namepl=namepl, record=r, form=form, tg_flash=f)
+        r = validate_get(id)
+        return dict(name=name, namepl=namepl, record=r, form=form,
+            tg_flash=kw.get('tg_flash', None))
 
     @validate(form=form)
     @error_handler(edit)
     @expose()
     def update(self, id, **kw):
         """Save or create record to model"""
-        try:
-            id = int(id)
-        except ValueError:
-            raise redirect('../list',
-                tg_flash=_(u'Identificador inválido: %s.') % id)
-
-        try:
-            record = cls.get(id)
-        except LookupError:
-            raise redirect('../list',
-                tg_flash=_(u'No existe el %s con identificador %d.')
-                    % (name, id))
-
-        try:
-            record.set(**kw)
-        except Exception, e:
-            raise redirect('../edit/%d' % id, tg_flash=_(u'No se pudo ' \
-                'modificar el %s, probablemente ya existe uno con el mismo ' \
-                'usuario (error: %s).' % (name, e)), **kw)
-
+        r = validate_set(id, kw)
         raise redirect('../list',
             tg_flash=_(u'El %s fue actualizado.') % name)
 
     @expose(template='kid:sercom.subcontrollers.%s.templates.show' % name)
     def show(self,id, **kw):
         """Show record in model"""
-        try:
-            id = int(id)
-        except ValueError:
-            raise redirect('../list',
-                tg_flash=_(u'Identificador inválido: %s.') % id)
-
-        try:
-            r = cls.get(id)
-        except LookupError:
-            raise redirect('../list',
-                tg_flash=_(u'No existe el %s con identificador %d.')
-                    % (name, id))
-
+        r = validate_get(id)
         r.obs = publish_parts(r.observaciones, writer_name='html')['html_body']
-
         return dict(name=name, namepl=namepl, record=r)
 
     @expose()
     def delete(self, id):
         """Destroy record in model"""
-        try:
-            id = int(id)
-        except ValueError:
-            raise redirect('../list',
-                tg_flash=_(u'Identificador inválido: %s.') % id)
-
-        try:
-            cls.delete(id)
-        except LookupError:
-            raise redirect('../list',
-                tg_flash=_(u'No existe el %s con identificador %d.')
-                    % (name, id))
-
+        r = validate_get(id)
+        r.destroySelf()
         raise redirect('../list',
             tg_flash=_(u'El %s fue eliminado permanentemente.') % name)
 
diff --git a/sercom/subcontrollers/validate.py b/sercom/subcontrollers/validate.py
new file mode 100644 (file)
index 0000000..67b749a
--- /dev/null
@@ -0,0 +1,32 @@
+# vim: set et sw=4 sts=4 encoding=utf-8 :
+
+__all__ = ('validate_get', 'validate_set', 'validate_new')
+
+from turbogears import redirect
+
+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)
+    try:
+        return cls.get(id)
+    except LookupError:
+        raise redirect(url, tg_flash=_(u'No existe %s con identificador %d')
+            % (name, id))
+
+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)
+
+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)
+