-
Notifications
You must be signed in to change notification settings - Fork 8
/
filters.py
80 lines (68 loc) · 4.49 KB
/
filters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import django_filters
from django import forms
from dateutil import parser
from observation_portal.observations.models import Observation, ConfigurationStatus
from observation_portal.requestgroups.models import RequestGroup, Request
from observation_portal.common.configdb import configdb
class ObservationFilter(django_filters.FilterSet):
site = django_filters.MultipleChoiceFilter(choices=configdb.get_site_tuples())
enclosure = django_filters.MultipleChoiceFilter(choices=configdb.get_enclosure_tuples())
telescope = django_filters.MultipleChoiceFilter(choices=configdb.get_telescope_tuples())
start_after = django_filters.CharFilter(field_name='start', method='filter_start_after', label='Start after',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}))
start_before = django_filters.CharFilter(field_name='start', method='filter_start_before', label='Start before',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}))
end_after = django_filters.CharFilter(field_name='end', method='filter_end_after', label='End after',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}))
end_before = django_filters.CharFilter(field_name='end', method='filter_end_before', label='End before',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}))
modified_after = django_filters.CharFilter(field_name='modified', method='filter_modified_after',
label='Modified After',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}))
request_id = django_filters.CharFilter(field_name='request__id')
request_group_id = django_filters.CharFilter(field_name='request__request_group__id', label='Request Group ID')
state = django_filters.MultipleChoiceFilter(choices=Observation.STATE_CHOICES, field_name='state')
observation_type = django_filters.MultipleChoiceFilter(choices=RequestGroup.OBSERVATION_TYPES,
field_name='request__request_group__observation_type',
label='Observation Type')
request_state = django_filters.MultipleChoiceFilter(choices=Request.STATE_CHOICES, field_name='request__state',
label='Request State')
proposal = django_filters.CharFilter(field_name='request__request_group__proposal__id', label='Proposal')
instrument_type = django_filters.MultipleChoiceFilter(
choices=configdb.get_instrument_type_tuples(),
label='Instrument Type',
field_name='configuration_statuses__configuration__instrument_type'
)
configuration_type = django_filters.MultipleChoiceFilter(
choices=configdb.get_configuration_type_tuples(),
label='Configuration Type',
field_name='configuration_statuses__configuration__type'
)
ordering = django_filters.OrderingFilter(
fields=['start', 'end', 'modified', 'created', 'state']
)
class Meta:
model = Observation
exclude = ['start', 'end', 'request', 'created', 'modified']
def filter_start_after(self, queryset, name, value):
start = parser.parse(value, ignoretz=True)
return queryset.filter(start__gte=start)
def filter_start_before(self, queryset, name, value):
start = parser.parse(value, ignoretz=True)
return queryset.filter(start__lt=start)
def filter_end_after(self, queryset, name, value):
end = parser.parse(value, ignoretz=True)
return queryset.filter(end__gte=end)
def filter_end_before(self, queryset, name, value):
end = parser.parse(value, ignoretz=True)
return queryset.filter(end__lt=end)
def filter_modified_after(self, queryset, name, value):
modified_after = parser.parse(value, ignoretz=True)
return queryset.filter(modified__gte=modified_after)
class ConfigurationStatusFilter(django_filters.FilterSet):
instrument_name = django_filters.ChoiceFilter(choices=configdb.get_instrument_name_tuples())
state = django_filters.MultipleChoiceFilter(choices=ConfigurationStatus.STATE_CHOICES)
site = django_filters.ChoiceFilter(choices=configdb.get_site_tuples(), field_name='observation__site')
class Meta:
model = ConfigurationStatus
fields = '__all__'