Skip to content

Commit

Permalink
Switch filter fields for datetimes from CharFilters to DateTimeFilter
Browse files Browse the repository at this point in the history
  • Loading branch information
eheinrich committed Jul 2, 2019
1 parent c621c83 commit ce05e64
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 70 deletions.
57 changes: 24 additions & 33 deletions observation_portal/blocks/filters.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import django_filters
from django import forms
from dateutil import parser
from distutils.util import strtobool

from observation_portal.observations.models import Observation
from observation_portal.common.configdb import configdb
Expand All @@ -11,19 +9,32 @@ class PondBlockFilter(django_filters.FilterSet):
site = django_filters.MultipleChoiceFilter(choices=configdb.get_site_tuples())
observatory = django_filters.MultipleChoiceFilter(choices=configdb.get_enclosure_tuples(), field_name='enclosure')
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')
end_before = django_filters.CharFilter(field_name='end', method='filter_end_before', label='End before')
modified_after = django_filters.CharFilter(field_name='modified', method='filter_modified_after',
label='Modified After')
start_after = django_filters.DateTimeFilter(
field_name='start',
lookup_expr='gte',
label='Start after',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
start_before = django_filters.DateTimeFilter(
field_name='start',
lookup_expr='lt',
label='Start before',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
end_after = django_filters.DateTimeFilter(field_name='end', lookup_expr='gte', label='End after')
end_before = django_filters.DateTimeFilter(field_name='end', lookup_expr='lt', label='End before')
modified_after = django_filters.DateTimeFilter(field_name='modified', lookup_expr='gte', label='Modified After')
request_num = django_filters.CharFilter(field_name='request__id')
tracking_num = django_filters.CharFilter(field_name='request__request_group__id')
proposal = django_filters.CharFilter(field_name='request__request_group__proposal__id', distinct=True, lookup_expr='exact')
instrument_class = django_filters.ChoiceFilter(choices=configdb.get_instrument_type_tuples(),
field_name='configuration_statuses__configuration__instrument_type')
proposal = django_filters.CharFilter(
field_name='request__request_group__proposal__id',
distinct=True,
lookup_expr='exact'
)
instrument_class = django_filters.ChoiceFilter(
choices=configdb.get_instrument_type_tuples(),
field_name='configuration_statuses__configuration__instrument_type'
)
canceled = django_filters.BooleanFilter(method='filter_canceled')
order = django_filters.OrderingFilter(fields=('start', 'modified'))
time_span = django_filters.DateRangeFilter(field_name='start')
Expand All @@ -32,26 +43,6 @@ 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)

def filter_canceled(self, queryset, name, value):
if not value:
return queryset.exclude(state='CANCELED')
Expand Down
77 changes: 40 additions & 37 deletions observation_portal/observations/filters.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
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
Expand All @@ -11,25 +10,49 @@ 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'}))
start_after = django_filters.DateTimeFilter(
field_name='start',
lookup_expr='gte',
label='Start after',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
start_before = django_filters.DateTimeFilter(
field_name='start',
lookup_expr='lt',
label='Start before',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
end_after = django_filters.DateTimeFilter(
field_name='end',
lookup_expr='gte',
label='End after',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
end_before = django_filters.DateTimeFilter(
field_name='end',
lookup_expr='lt',
label='End before',
widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'})
)
modified_after = django_filters.CharFilter(
field_name='modified',
method='gte',
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')
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(),
Expand All @@ -49,26 +72,6 @@ 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())
Expand Down

0 comments on commit ce05e64

Please sign in to comment.