3d90145fedcb89cfe4f1cc421611f29953b495ba
[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.QUEUED],
30             Task.STATUS_CHOICES_REVERSED[TaskStatus.PREPROCESSING],
31             Task.STATUS_CHOICES_REVERSED[TaskStatus.PENDING],
32             Task.STATUS_CHOICES_REVERSED[TaskStatus.RUNNING],
33             Task.STATUS_CHOICES_REVERSED[TaskStatus.STOPPED],
34             Task.STATUS_CHOICES_REVERSED[TaskStatus.POSTPROCESSING],
35         ),
36         FINISHED: (
37             Task.STATUS_CHOICES_REVERSED[TaskStatus.FINISHED],
38             Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED],
39             Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED],
40         ),
41         FAILED: (
42             Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED],
43             Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED],
44         ),
45     }
46
47     status = forms.MultipleChoiceField(choices=STATUS_CHOICES, label=u"Status", required=False,
48                                        widget=forms.CheckboxSelectMultiple)
49     host = forms.MultipleChoiceField(choices=lazy(host_choices, tuple)(), label=u"Host", required=False,
50                                      widget=forms.CheckboxSelectMultiple)
51
52     # advanced
53     keywords = forms.CharField(max_length=100, label=u"Wyszukaj frazę", required=False)
54     status_exact = forms.ChoiceField(choices=[(None, u"----------")] + Task.STATUS_CHOICES, label=u"Status", 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)