Don’t let _set_status_filters mutate original list

Mutating stuff is scary and prone to problems. Better for it to
return a new list instead.
This commit is contained in:
Chris Hill-Scott
2016-08-05 10:18:27 +01:00
parent d0ef913520
commit 01bb2ada0a
2 changed files with 20 additions and 20 deletions

View File

@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import ago
import time import time
import dateutil import dateutil
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import ago from itertools import chain
from flask import ( from flask import (
render_template, render_template,
@@ -47,16 +48,15 @@ def _parse_filter_args(filter_dict):
def _set_status_filters(filter_args): def _set_status_filters(filter_args):
status_filters = filter_args.get('status', [])
all_failure_statuses = ['failed', 'temporary-failure', 'permanent-failure', 'technical-failure'] all_failure_statuses = ['failed', 'temporary-failure', 'permanent-failure', 'technical-failure']
all_sending_statuses = ['created', 'sending'] all_sending_statuses = ['created', 'sending']
all_statuses = all_sending_statuses + ['delivered'] + all_failure_statuses all_statuses = all_sending_statuses + ['delivered'] + all_failure_statuses
if filter_args.get('status'): return list(chain(
if 'sending' in filter_args.get('status'): (status_filters or all_statuses),
filter_args['status'].extend(all_sending_statuses[:1]) all_sending_statuses[:1] if 'sending' in status_filters else [],
elif 'failed' in filter_args.get('status'): all_failure_statuses[1:] if 'failed' in status_filters else []
filter_args['status'].extend(all_failure_statuses[1:]) ))
else:
filter_args['status'] = all_statuses
@main.route("/services/<service_id>/jobs") @main.route("/services/<service_id>/jobs")
@@ -76,7 +76,7 @@ def view_job(service_id, job_id):
job = job_api_client.get_job(service_id, job_id)['data'] job = job_api_client.get_job(service_id, job_id)['data']
filter_args = _parse_filter_args(request.args) filter_args = _parse_filter_args(request.args)
_set_status_filters(filter_args) filter_args['status'] = _set_status_filters(filter_args)
return render_template( return render_template(
'views/jobs/job.html', 'views/jobs/job.html',
@@ -118,7 +118,7 @@ def view_job_csv(service_id, job_id):
version=job['template_version'] version=job['template_version']
)['data'] )['data']
filter_args = _parse_filter_args(request.args) filter_args = _parse_filter_args(request.args)
_set_status_filters(filter_args) filter_args['status'] = _set_status_filters(filter_args)
return ( return (
generate_notifications_csv( generate_notifications_csv(
@@ -162,7 +162,7 @@ def view_notifications(service_id, message_type):
abort(404) abort(404)
filter_args = _parse_filter_args(request.args) filter_args = _parse_filter_args(request.args)
_set_status_filters(filter_args) filter_args['status'] = _set_status_filters(filter_args)
notifications = notification_api_client.get_notifications_for_service( notifications = notification_api_client.get_notifications_for_service(
service_id=service_id, service_id=service_id,
@@ -172,7 +172,7 @@ def view_notifications(service_id, message_type):
limit_days=current_app.config['ACTIVITY_STATS_LIMIT_DAYS']) limit_days=current_app.config['ACTIVITY_STATS_LIMIT_DAYS'])
view_dict = dict( view_dict = dict(
message_type=message_type, message_type=message_type,
status=request.args.get('status') status=filter_args['status']
) )
prev_page = None prev_page = None
if notifications['links'].get('prev', None): if notifications['links'].get('prev', None):
@@ -211,7 +211,7 @@ def view_notifications(service_id, message_type):
page=page, page=page,
prev_page=prev_page, prev_page=prev_page,
next_page=next_page, next_page=next_page,
request_args=request.args, status=request.args.get('status'),
message_type=message_type, message_type=message_type,
download_link=url_for( download_link=url_for(
'.view_notifications_csv', '.view_notifications_csv',
@@ -311,16 +311,16 @@ def _get_job_counts(job, help_argument):
def get_job_partials(job): def get_job_partials(job):
filter_args = _parse_filter_args(request.args) filter_args = _parse_filter_args(request.args)
_set_status_filters(filter_args) filter_args['status'] = _set_status_filters(filter_args)
notifications = notification_api_client.get_notifications_for_service( notifications = notification_api_client.get_notifications_for_service(
job['service'], job['id'], status=filter_args.get('status') job['service'], job['id'], status=filter_args['status']
) )
return { return {
'counts': render_template( 'counts': render_template(
'partials/jobs/count.html', 'partials/jobs/count.html',
job=job, job=job,
counts=_get_job_counts(job, request.args.get('help', 0)), counts=_get_job_counts(job, request.args.get('help', 0)),
status=request.args.get('status', '') status=filter_args['status']
), ),
'notifications': render_template( 'notifications': render_template(
'partials/jobs/notifications.html', 'partials/jobs/notifications.html',
@@ -331,7 +331,7 @@ def get_job_partials(job):
'.view_job_csv', '.view_job_csv',
service_id=current_service['id'], service_id=current_service['id'],
job_id=job['id'], job_id=job['id'],
status=request.args.get('status', '') status=request.args.get('status')
), ),
help=get_help_argument(), help=get_help_argument(),
time_left=get_time_left(job['created_at']) time_left=get_time_left(job['created_at'])

View File

@@ -14,9 +14,9 @@
<h1 class="heading-large"> <h1 class="heading-large">
<span class="visually-hidden"> <span class="visually-hidden">
{%- if request_args.get('status') != 'delivered,failed' -%} {%- if status != 'delivered,failed' -%}
{%- for label, option, _, _ in status_filters -%} {%- for label, option, _, _ in status_filters -%}
{%- if request_args.get('status', 'delivered,failed') == option -%}{{label}} {% endif -%} {%- if status == option -%}{{label}} {% endif -%}
{%- endfor -%} {%- endfor -%}
{%- endif -%} {%- endif -%}
</span> </span>
@@ -29,7 +29,7 @@
{{ pill( {{ pill(
'Status', 'Status',
status_filters, status_filters,
request_args.get('status', '') status
) }} ) }}
</div> </div>