Merge remote-tracking branch 'origin/master'
authorMaciej Tronowski <mtro@man.poznan.pl>
Wed, 4 Mar 2015 09:22:22 +0000 (10:22 +0100)
committerMaciej Tronowski <mtro@man.poznan.pl>
Wed, 4 Mar 2015 09:22:22 +0000 (10:22 +0100)
# Conflicts:
# qcg/fields.py
# qcg/forms.py
# qcg/templates/qcg/job_new.html

1  2 
qcg/fields.py
qcg/forms.py
qcg/templates/qcg/job_new.html

diff --cc qcg/fields.py
index 0000000,3e5ec44..e067f46
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,65 +1,55 @@@
+ # 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")
diff --cc qcg/forms.py
@@@ -4,6 -4,7 +4,7 @@@ from django.core.validators import Rege
  from django.template.defaultfilters import capfirst
  from pyqcg.utils import TaskStatus
  
 -from qcg.fields import PredefinedChoiceField, MultiplePredefinedChoiceField, TimeRangeField
++from qcg.fields import TimeRangeField
  from qcg.models import Task, Allocation
  
  
              <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">