From: Maciej Tronowski Date: Wed, 4 Mar 2015 09:22:22 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/master' X-Git-Tag: v1.0~140 X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=commitdiff_plain;h=7c9392626226b7d859c5bc321ab15326fa1a17c6;p=qcg-portal.git Merge remote-tracking branch 'origin/master' # Conflicts: # qcg/fields.py # qcg/forms.py # qcg/templates/qcg/job_new.html --- 7c9392626226b7d859c5bc321ab15326fa1a17c6 diff --cc qcg/fields.py index 0000000,3e5ec44..e067f46 mode 000000,100644..100644 --- a/qcg/fields.py +++ b/qcg/fields.py @@@ -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 index 7c715d9,7b11d13..b2ad790 --- a/qcg/forms.py +++ b/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 diff --cc qcg/templates/qcg/job_new.html index ad5652f,37a4fc5..d5b7344 --- a/qcg/templates/qcg/job_new.html +++ b/qcg/templates/qcg/job_new.html @@@ -120,14 -121,11 +120,14 @@@
{% 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" %}