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]
)
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))
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")
queue = forms.ChoiceField(choices=QUEUE_CHOICES, label=u"Kolejka", required=False)
procs = forms.IntegerField(label=u"Liczba procesów", min_value=0, required=False)
nodes = forms.CharField(label=u"Topologia węzłów", max_length=10, validators=[nodes_validator], required=False)
- wall_time = forms.IntegerField(label=u"Wall time (s)", min_value=0, required=False) # TODO duration field
+ wall_time = TimeRangeField(label=u"Wall time", required=False)
memory = forms.IntegerField(label=u"Pamięć (MB)", min_value=0, required=False)
memory_per_slot = forms.IntegerField(label=u"Pamięci per proces (MB)", min_value=0, required=False)
modules = forms.MultipleChoiceField(label=u"Moduły", choices=MODULES_CHOICES, required=False) # TODO choices
{% 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" %}
- {% include 'qcg/time_range_field.html' with field_name='wall_time' field=form.wall_time %}
+ {% bootstrap_field form.wall_time layout="horizontal" form_group_class="form-group timerange" %}
{% 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" %}