1ère astuce

50 views
Skip to first unread message

eric cuver

unread,
Oct 3, 2014, 2:48:56 PM10/3/14
to web2...@googlegroups.com
on va commence par du lourd. c'est un validator qu'on a eu besoin de creer pour une application. la fonction de ce validator. c'est que l'utilisateur rentre les donnée en heure minute et seconde.
et les données sont convertie directement dans la base de donnée  en seconde pour etre réutilise pour des calcules. et l'avantage c'est que l'utilisateur lui ne le voit pas du tout. tout se passe dans la cuisine interne de la base de donnée.
si vous avez des questions n'hesitez pas.  

class IS_SECONDS(Validator):

   def __init__(self, error_message='Enter time as hh:mm:ss'):
       self.error_message = error_message

   def __call__(self, value):
       try:
           ivalue = value
           value = regex_time.match(value.lower())
           (h, m, s) = (int(value.group('h')), 0, 0)
           if not value.group('m') is None:
               m = int(value.group('m'))
           if not value.group('s') is None:
               s = int(value.group('s'))
           
           return (h*3600 + m*60 + s, None)
       except AttributeError:
           pass
       except ValueError:
           pass
       return (ivalue, translate(self.error_message))

db.define_table('planing', 
    Field('heure_travaille', 'integer', widget=SQLFORM.widgets.time.widget, requires=IS_SECONDS(), label=T('heure travaille')),
    Field('vacance', 'integer', widget=SQLFORM.widgets.time.widget, requires=IS_SECONDS(), label=T('heure de vacance')),
    Field('total', 'integer', writable=False, compute=lambda row: row.heure_travaille + row.vacance)

Arglanir

unread,
Oct 6, 2014, 4:37:23 PM10/6/14
to web2...@googlegroups.com
Merci d'avoir partagé. ça aide à mieux comprendre les validateurs et les valeurs retournées.

Il manque par contre ta définition de regex_time :-)
Raccourci d'écriture:

m = re.match(r"(\d{2}):(\d{2}):(\d{2})", value)
h, m, s = (int(m.group(i)) for i in range(1, 4))

Mais j'aime bien. En plus tu as un bon exemple de champ calculé dans la table.

eric cuver

unread,
Oct 8, 2014, 4:21:27 AM10/8/14
to web2...@googlegroups.com
oui bonne remarque je ne l'ai pas mis car je l'ai importe directement  des modules web2py
au debut du code il faut l'importe de manière suivante :

from gluon.validators import Validator, translate, regex_time
Reply all
Reply to author
Forward
0 new messages