src/ldt/ldt/forms/fields.py
changeset 1061 92e3a410e192
parent 818 1762d0711008
child 1062 14c98d369c5a
equal deleted inserted replaced
1060:71090f44e6c1 1061:92e3a410e192
     2 Field classes.
     2 Field classes.
     3 """
     3 """
     4 
     4 
     5 from django import forms
     5 from django import forms
     6 from django.utils.translation import ugettext_lazy as _
     6 from django.utils.translation import ugettext_lazy as _
       
     7 from django.core.exceptions import ValidationError
       
     8 from django.core.validators import validate_integer
     7 import logging
     9 import logging
     8 import time
    10 import time
     9 import math
    11 import math
    10 
    12 
    11 __all__ = (
    13 __all__ = (
    12     'LdtDurationField'
    14     'LdtDurationField'
    13 )
    15 )
    14 
    16 
    15 class LdtDurationField (forms.TimeField):
    17 class LdtDurationField (forms.TimeField):
       
    18     """
       
    19     A field allowing to enter the duration format (eg: XhMM, XXhMM, HH:MM:SS)
       
    20     """
       
    21     
    16     default_error_messages = {
    22     default_error_messages = {
    17         'invalid': _(u'Enter a valid duration format'),
    23         'required': _(u'The duration field can not be empty.'),
       
    24         'invalid': _(u'Enter a valid duration format;'),
    18     }
    25     }
    19     
    26     
    20     def __init__(self, formats, *args, **kwargs):
    27     def __init__(self, formats, *args, **kwargs):
    21         self.formats = formats
    28         self.formats = formats
    22         super(LdtDurationField, self).__init__(*args, **kwargs)
    29         super(LdtDurationField, self).__init__(*args, **kwargs)
    23     
    30     
    24     def clean(self, data):
    31     def to_python(self, value):
    25         dur = data
    32         logging.debug(value)
       
    33         dur = value
    26         for format in self.formats:
    34         for format in self.formats:
    27             try:
    35             try:
    28                 dur = time.strptime(dur, format)
    36                 dur = time.strptime(dur, format)
    29                 dur = dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec
    37                 dur = dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec
    30                 dur = dur*1000
    38                 dur = dur*1000
    31                 break
    39                 break
    32             except:
    40             except:
    33                 logging.debug("trying next format")
    41                 pass
    34         return dur
    42         return dur
       
    43     
       
    44     def validate(self, value):
       
    45         if value==None or value=="":
       
    46             raise ValidationError(self.default_error_messages['required'])
       
    47         else:
       
    48             validate_integer(self.default_error_messages['invalid'])
       
    49