strictly match and of url for login views
[qcg-portal.git] / qcg / fields.py
index 3e5ec44..a61560d 100644 (file)
@@ -4,22 +4,12 @@ from django import forms
 from django.core.exceptions import ValidationError
 
 
-class PredefinedChoiceField(forms.ChoiceField):
-    def valid_value(self, value):
-        # any value is valid
-        return True
-
-
-class MultiplePredefinedChoiceField(forms.MultipleChoiceField, PredefinedChoiceField):
-    pass
-
-
 class TimeRangeWidget(forms.MultiWidget):
     def decompress(self, value):
         if not value:
-            return [0, TimeRangeField.SECONDS]
+            return [None, None]
 
-        seconds = value.seconds + 86400 * value.days
+        seconds = int(value.total_seconds())
 
         if seconds % 60 != 0:
             return [seconds, TimeRangeField.SECONDS]
@@ -40,8 +30,8 @@ class TimeRangeField(forms.MultiValueField):
         (DAYS, u"Dni"),
     )
 
-    value = forms.IntegerField(min_value=0)
-    unit = forms.ChoiceField(choices=UNIT_CHOICES)
+    value = forms.IntegerField(min_value=0, required=False)
+    unit = forms.TypedChoiceField(choices=UNIT_CHOICES, coerce=int, required=False)
 
     widget = TimeRangeWidget(widgets=(value.widget, unit.widget))
 
@@ -49,17 +39,18 @@ class TimeRangeField(forms.MultiValueField):
         super(TimeRangeField, self).__init__((self.value, self.unit), *args, **kwargs)
 
     def compress(self, data_list):
-        try:
-            unit = int(data_list[1])
-            if unit == self.SECONDS:
-                return timedelta(seconds=data_list[0])
-            elif unit == self.MINUTES:
-                return timedelta(minutes=data_list[0])
-            elif unit == self.HOURS:
-                return timedelta(hours=data_list[0])
-            elif unit == self.DAYS:
-                return timedelta(days=data_list[0])
-            else:
-                raise ValidationError(u"Nieprawidłowa jednostka")
-        except ValueError:
-            raise ValidationError(u"Nieprawidłowa jednostka")
+        value, unit = data_list
+
+        if value is None:
+            return None
+
+        if unit == self.SECONDS:
+            return timedelta(seconds=value)
+        elif unit == self.MINUTES:
+            return timedelta(minutes=value)
+        elif unit == self.HOURS:
+            return timedelta(hours=value)
+        elif unit == self.DAYS:
+            return timedelta(days=value)
+
+        raise ValidationError(u"Nieprawidłowa jednostka")