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 |