uwsgi configuration + fabfile
[qcg-portal.git] / qcg / fields.py
1 # coding=utf-8
2 from datetime import timedelta
3 from django import forms
4 from django.core.exceptions import ValidationError
5
6
7 class PredefinedChoiceField(forms.ChoiceField):
8     def valid_value(self, value):
9         # any value is valid
10         return True
11
12
13 class MultiplePredefinedChoiceField(forms.MultipleChoiceField, PredefinedChoiceField):
14     pass
15
16
17 class TimeRangeWidget(forms.MultiWidget):
18     def decompress(self, value):
19         if not value:
20             return [0, TimeRangeField.SECONDS]
21
22         seconds = value.seconds + 86400 * value.days
23
24         if seconds % 60 != 0:
25             return [seconds, TimeRangeField.SECONDS]
26         elif seconds % 3600 != 0:
27             return [seconds / 60, TimeRangeField.MINUTES]
28         elif seconds % 86400 != 0:
29             return [seconds / 3600, TimeRangeField.HOURS]
30         else:
31             return [seconds / 86400, TimeRangeField.DAYS]
32
33
34 class TimeRangeField(forms.MultiValueField):
35     SECONDS, MINUTES, HOURS, DAYS = range(4)
36     UNIT_CHOICES = (
37         (SECONDS, u"Sekund"),
38         (MINUTES, u"Minut"),
39         (HOURS, u"Godzin"),
40         (DAYS, u"Dni"),
41     )
42
43     value = forms.IntegerField(min_value=0)
44     unit = forms.ChoiceField(choices=UNIT_CHOICES)
45
46     widget = TimeRangeWidget(widgets=(value.widget, unit.widget))
47
48     def __init__(self, *args, **kwargs):
49         super(TimeRangeField, self).__init__((self.value, self.unit), *args, **kwargs)
50
51     def compress(self, data_list):
52         try:
53             unit = int(data_list[1])
54             if unit == self.SECONDS:
55                 return timedelta(seconds=data_list[0])
56             elif unit == self.MINUTES:
57                 return timedelta(minutes=data_list[0])
58             elif unit == self.HOURS:
59                 return timedelta(hours=data_list[0])
60             elif unit == self.DAYS:
61                 return timedelta(days=data_list[0])
62             else:
63                 raise ValidationError(u"NieprawidÅ‚owa jednostka")
64         except ValueError:
65             raise ValidationError(u"NieprawidÅ‚owa jednostka")