mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-20 14:29:51 -04:00
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:
@@ -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'])
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user