--- /dev/null
+ # coding=utf-8
+ from datetime import timedelta
+ 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]
+
+ seconds = value.seconds + 86400 * value.days
+
+ if seconds % 60 != 0:
+ return [seconds, TimeRangeField.SECONDS]
+ elif seconds % 3600 != 0:
+ return [seconds / 60, TimeRangeField.MINUTES]
+ elif seconds % 86400 != 0:
+ return [seconds / 3600, TimeRangeField.HOURS]
+ else:
+ return [seconds / 86400, TimeRangeField.DAYS]
+
+
+ class TimeRangeField(forms.MultiValueField):
+ SECONDS, MINUTES, HOURS, DAYS = range(4)
+ UNIT_CHOICES = (
+ (SECONDS, u"Sekund"),
+ (MINUTES, u"Minut"),
+ (HOURS, u"Godzin"),
+ (DAYS, u"Dni"),
+ )
+
+ value = forms.IntegerField(min_value=0)
+ unit = forms.ChoiceField(choices=UNIT_CHOICES)
+
+ widget = TimeRangeWidget(widgets=(value.widget, unit.widget))
+
+ def __init__(self, *args, **kwargs):
+ 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")
<fieldset id="resources" class="tab-pane" role="tabpanel">
{% bootstrap_field form.host layout="horizontal" %}
{% bootstrap_field form.queue layout="horizontal" %}
+ {% bootstrap_field form.properties layout="horizontal" form_group_class="form-group collapse" %}
+ {% bootstrap_field form.modules layout="horizontal" form_group_class="form-group collapse" %}
{% bootstrap_field form.procs layout="horizontal" %}
{% bootstrap_field form.nodes layout="horizontal" form_group_class="form-group collapse" %}
- {% bootstrap_field form.wall_time layout="horizontal" %}
+ {% include 'qcg/time_range_field.html' with field_name='wall_time' field=form.wall_time %}
- {% bootstrap_field form.memory layout="horizontal" %}
- {% bootstrap_field form.memory_per_slot layout="horizontal" %}
+ {% bootstrap_field form.memory layout="horizontal" form_group_class="form-group collapse" %}
+ {% bootstrap_field form.memory_per_slot layout="horizontal" form_group_class="form-group collapse" %}
+ {% bootstrap_field form.reservation layout="horizontal" form_group_class="form-group collapse" %}
</fieldset>
<fieldset id="files" class="tab-pane" role="tabpanel">