job templates as main page for submitting jobs
[qcg-portal.git] / qcg / fields.py
index 3e5ec44..73b46f4 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 = value.total_seconds()
 
         if seconds % 60 != 0:
             return [seconds, TimeRangeField.SECONDS]
@@ -41,7 +31,7 @@ class TimeRangeField(forms.MultiValueField):
     )
 
     value = forms.IntegerField(min_value=0)
-    unit = forms.ChoiceField(choices=UNIT_CHOICES)
+    unit = forms.TypedChoiceField(choices=UNIT_CHOICES, coerce=int)
 
     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")