1
0
Fork 0

views/ObservationListView: Add get_filter_params method (R0915)

This commit refactors the HTTP GET parameter parsing into a new
funciton get_filter_params, reducing the complexity of get_queryset
and thus fixes a too-many-statements (R0915) pylint error.

Signed-off-by: Fabian P. Schmidt <kerel@mailbox.org>
merge-requests/809/head
Fabian P. Schmidt 2019-11-30 07:56:34 +01:00
parent f91e9adbb9
commit 48c27fbe8d
2 changed files with 39 additions and 47 deletions

View File

@ -16,6 +16,5 @@ disable=
R0912,
R0913,
R0914,
R0915,
W0201,
W0703,

View File

@ -96,47 +96,40 @@ class ObservationListView(ListView):
context_object_name = "observations"
paginate_by = settings.ITEMS_PER_PAGE
template_name = 'base/observations.html'
str_filters = ['norad', 'observer', 'station', 'start', 'end']
flag_filters = ['bad', 'good', 'unvetted', 'future', 'failed']
def get_filter_params(self):
"""
Get the parsed filter parameters from the HTTP GET parameters
- str_filters vaues are str, default to ''
- flag_filters values are Boolean, default to False
Returns a dict, filter_name is the key, the parsed parameter is the value.
"""
filter_params = {}
for parameter_name in self.str_filters:
filter_params[parameter_name] = self.request.GET.get(parameter_name, '')
for parameter_name in self.flag_filters:
param = self.request.GET.get(parameter_name, 1)
filter_params[parameter_name] = (param != '0')
return filter_params
def get_queryset(self):
"""
Optionally filter based on norad get argument
Optionally filter based on future/good/bad/unvetted/failed
"""
norad_cat_id = self.request.GET.get('norad', '')
observer = self.request.GET.get('observer', '')
station = self.request.GET.get('station', '')
start = self.request.GET.get('start', '')
end = self.request.GET.get('end', '')
filter_params = self.get_filter_params()
self.filtered = False
bad = self.request.GET.get('bad', '1')
if bad == '0':
bad = False
else:
bad = True
good = self.request.GET.get('good', '1')
if good == '0':
good = False
else:
good = True
unvetted = self.request.GET.get('unvetted', '1')
if unvetted == '0':
unvetted = False
else:
unvetted = True
future = self.request.GET.get('future', '1')
if future == '0':
future = False
else:
future = True
failed = self.request.GET.get('failed', '1')
if failed == '0':
failed = False
else:
failed = True
results = self.request.GET.getlist('results')
if False in (bad, good, unvetted, future, failed):
if not all([filter_params['bad'], filter_params['good'], filter_params['unvetted'],
filter_params['future'], filter_params['failed']]):
self.filtered = True
if results:
self.filtered = True
@ -144,31 +137,31 @@ class ObservationListView(ListView):
observations = Observation.objects.prefetch_related(
'satellite', 'demoddata', 'author', 'ground_station'
)
if not norad_cat_id == '':
observations = observations.filter(satellite__norad_cat_id=norad_cat_id)
if not filter_params['norad'] == '':
observations = observations.filter(satellite__norad_cat_id=filter_params['norad'])
self.filtered = True
if not observer == '':
observations = observations.filter(author=observer)
if not filter_params['observer'] == '':
observations = observations.filter(author=filter_params['observer'])
self.filtered = True
if not station == '':
observations = observations.filter(ground_station_id=station)
if not filter_params['station'] == '':
observations = observations.filter(ground_station_id=filter_params['station'])
self.filtered = True
if not start == '':
observations = observations.filter(start__gt=start)
if not filter_params['start'] == '':
observations = observations.filter(start__gt=filter_params['start'])
self.filtered = True
if not end == '':
observations = observations.filter(end__lt=end)
if not filter_params['end'] == '':
observations = observations.filter(end__lt=filter_params['end'])
self.filtered = True
if not bad:
if not filter_params['bad']:
observations = observations.exclude(vetted_status='bad')
if not good:
if not filter_params['good']:
observations = observations.exclude(vetted_status='good')
if not failed:
if not filter_params['failed']:
observations = observations.exclude(vetted_status='failed')
if not unvetted:
if not filter_params['unvetted']:
observations = observations.exclude(vetted_status='unknown', end__lte=now())
if not future:
if not filter_params['future']:
observations = observations.exclude(vetted_status='unknown', end__gt=now())
if results:
if 'w0' in results: