d9d7a92e4bdfb76041d1b3ae46abda288bb4c748
[qcg-portal.git] / qcg / forms.py
1 # coding=utf-8
2 from django import forms
3 from django.core.validators import RegexValidator
4 from django.template.defaultfilters import capfirst
5 from django.utils.functional import lazy
6 from pyqcg.utils import TaskStatus
7
8 from qcg.models import Task, Allocation
9
10
11 def host_choices():
12     return tuple((host, capfirst(host.split('.')[0])) for host in
13                  Allocation.objects.values_list('host_name', flat=True).order_by('host_name').distinct())
14
15
16 date_range_validator = RegexValidator(r'[0-9]{2}\.[0-9]{2}\.[0-9]{4} - [0-9]{2}\.[0-9]{2}\.[0-9]{4}')
17
18
19 class FiltersForm(forms.Form):
20     ACTIVE, FINISHED, FAILED = range(3)
21     STATUS_CHOICES = (
22         (ACTIVE, u"Aktywne"),
23         (FINISHED, u"Zakończone"),
24         (FAILED, u"Niepowodzenia"),
25     )
26
27     STATUS_MAP = {
28         ACTIVE: (
29             Task.STATUS_CHOICES_REVERSED[TaskStatus.UNSUBMITTED],
30             Task.STATUS_CHOICES_REVERSED[TaskStatus.UNCOMMITTED],
31             Task.STATUS_CHOICES_REVERSED[TaskStatus.QUEUED],
32             Task.STATUS_CHOICES_REVERSED[TaskStatus.PREPROCESSING],
33             Task.STATUS_CHOICES_REVERSED[TaskStatus.PENDING],
34             Task.STATUS_CHOICES_REVERSED[TaskStatus.RUNNING],
35             Task.STATUS_CHOICES_REVERSED[TaskStatus.STOPPED],
36             Task.STATUS_CHOICES_REVERSED[TaskStatus.POSTPROCESSING],
37         ),
38         FINISHED: (
39             Task.STATUS_CHOICES_REVERSED[TaskStatus.FINISHED],
40         ),
41         FAILED: (
42             Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED],
43             Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED],
44         ),
45     }
46     STATUS_CHOICES_DICT = dict(STATUS_CHOICES)
47
48     status = forms.MultipleChoiceField(choices=STATUS_CHOICES, label=u"Status", required=False,
49                                        widget=forms.CheckboxSelectMultiple)
50     host = forms.MultipleChoiceField(choices=lazy(host_choices, tuple)(), label=u"Host", required=False,
51                                      widget=forms.CheckboxSelectMultiple)
52
53     # advanced
54     keywords = forms.CharField(max_length=100, label=u"Wyszukaj frazę", required=False)
55     submission = forms.CharField(label=u"Data zlecenia", validators=[date_range_validator], required=False)
56     finish = forms.CharField(label=u"Data zakończenia", validators=[date_range_validator], required=False)