mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 00:33:58 -04:00
Move pagination utils into own module
This continues the pattern established in [1], just to chip away a bit more at the random collection of stuff in utils/__init__.py. [1]: https://github.com/alphagov/notifications-admin/pull/3923
This commit is contained in:
@@ -30,12 +30,11 @@ from app.utils import (
|
|||||||
DELIVERED_STATUSES,
|
DELIVERED_STATUSES,
|
||||||
FAILURE_STATUSES,
|
FAILURE_STATUSES,
|
||||||
REQUESTED_STATUSES,
|
REQUESTED_STATUSES,
|
||||||
generate_next_dict,
|
|
||||||
generate_previous_dict,
|
|
||||||
get_current_financial_year,
|
get_current_financial_year,
|
||||||
service_has_permission,
|
service_has_permission,
|
||||||
)
|
)
|
||||||
from app.utils.csv import Spreadsheet
|
from app.utils.csv import Spreadsheet
|
||||||
|
from app.utils.pagination import generate_next_dict, generate_previous_dict
|
||||||
from app.utils.user import user_has_permissions
|
from app.utils.user import user_has_permissions
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,18 +33,17 @@ from app.formatters import get_time_left, message_count_noun
|
|||||||
from app.main import main
|
from app.main import main
|
||||||
from app.main.forms import SearchNotificationsForm
|
from app.main.forms import SearchNotificationsForm
|
||||||
from app.models.job import Job
|
from app.models.job import Job
|
||||||
from app.utils import (
|
from app.utils import parse_filter_args, set_status_filters
|
||||||
generate_next_dict,
|
|
||||||
generate_previous_dict,
|
|
||||||
get_page_from_request,
|
|
||||||
parse_filter_args,
|
|
||||||
set_status_filters,
|
|
||||||
)
|
|
||||||
from app.utils.csv import generate_notifications_csv
|
from app.utils.csv import generate_notifications_csv
|
||||||
from app.utils.letters import (
|
from app.utils.letters import (
|
||||||
get_letter_printing_statement,
|
get_letter_printing_statement,
|
||||||
printing_today_or_tomorrow,
|
printing_today_or_tomorrow,
|
||||||
)
|
)
|
||||||
|
from app.utils.pagination import (
|
||||||
|
generate_next_dict,
|
||||||
|
generate_previous_dict,
|
||||||
|
get_page_from_request,
|
||||||
|
)
|
||||||
from app.utils.user import user_has_permissions
|
from app.utils.user import user_has_permissions
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,12 +27,12 @@ from app.statistics_utils import (
|
|||||||
get_formatted_percentage,
|
get_formatted_percentage,
|
||||||
get_formatted_percentage_two_dp,
|
get_formatted_percentage_two_dp,
|
||||||
)
|
)
|
||||||
from app.utils import (
|
from app.utils.csv import Spreadsheet
|
||||||
|
from app.utils.pagination import (
|
||||||
generate_next_dict,
|
generate_next_dict,
|
||||||
generate_previous_dict,
|
generate_previous_dict,
|
||||||
get_page_from_request,
|
get_page_from_request,
|
||||||
)
|
)
|
||||||
from app.utils.csv import Spreadsheet
|
|
||||||
from app.utils.user import user_is_platform_admin
|
from app.utils.user import user_is_platform_admin
|
||||||
|
|
||||||
COMPLAINT_THRESHOLD = 0.02
|
COMPLAINT_THRESHOLD = 0.02
|
||||||
|
|||||||
@@ -45,17 +45,17 @@ from app.s3_client.s3_letter_upload_client import (
|
|||||||
upload_letter_to_s3,
|
upload_letter_to_s3,
|
||||||
)
|
)
|
||||||
from app.template_previews import TemplatePreview, sanitise_letter
|
from app.template_previews import TemplatePreview, sanitise_letter
|
||||||
from app.utils import (
|
from app.utils import unicode_truncate
|
||||||
generate_next_dict,
|
|
||||||
generate_previous_dict,
|
|
||||||
get_page_from_request,
|
|
||||||
unicode_truncate,
|
|
||||||
)
|
|
||||||
from app.utils.csv import Spreadsheet, get_errors_for_csv
|
from app.utils.csv import Spreadsheet, get_errors_for_csv
|
||||||
from app.utils.letters import (
|
from app.utils.letters import (
|
||||||
get_letter_printing_statement,
|
get_letter_printing_statement,
|
||||||
get_letter_validation_error,
|
get_letter_validation_error,
|
||||||
)
|
)
|
||||||
|
from app.utils.pagination import (
|
||||||
|
generate_next_dict,
|
||||||
|
generate_previous_dict,
|
||||||
|
get_page_from_request,
|
||||||
|
)
|
||||||
from app.utils.templates import get_sample_template, get_template
|
from app.utils.templates import get_sample_template, get_template
|
||||||
from app.utils.user import user_has_permissions
|
from app.utils.user import user_has_permissions
|
||||||
|
|
||||||
|
|||||||
@@ -55,32 +55,6 @@ def redirect_to_sign_in(f):
|
|||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
def get_page_from_request():
|
|
||||||
if 'page' in request.args:
|
|
||||||
try:
|
|
||||||
return int(request.args['page'])
|
|
||||||
except ValueError:
|
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
def generate_previous_dict(view, service_id, page, url_args=None):
|
|
||||||
return generate_previous_next_dict(view, service_id, page - 1, 'Previous page', url_args or {})
|
|
||||||
|
|
||||||
|
|
||||||
def generate_next_dict(view, service_id, page, url_args=None):
|
|
||||||
return generate_previous_next_dict(view, service_id, page + 1, 'Next page', url_args or {})
|
|
||||||
|
|
||||||
|
|
||||||
def generate_previous_next_dict(view, service_id, page, title, url_args):
|
|
||||||
return {
|
|
||||||
'url': url_for(view, service_id=service_id, page=page, **url_args),
|
|
||||||
'title': title,
|
|
||||||
'label': 'page {}'.format(page)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_help_argument():
|
def get_help_argument():
|
||||||
return request.args.get('help') if request.args.get('help') in ('1', '2', '3') else None
|
return request.args.get('help') if request.args.get('help') in ('1', '2', '3') else None
|
||||||
|
|
||||||
|
|||||||
27
app/utils/pagination.py
Normal file
27
app/utils/pagination.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
from flask import request, url_for
|
||||||
|
|
||||||
|
|
||||||
|
def get_page_from_request():
|
||||||
|
if 'page' in request.args:
|
||||||
|
try:
|
||||||
|
return int(request.args['page'])
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
def generate_previous_dict(view, service_id, page, url_args=None):
|
||||||
|
return generate_previous_next_dict(view, service_id, page - 1, 'Previous page', url_args or {})
|
||||||
|
|
||||||
|
|
||||||
|
def generate_next_dict(view, service_id, page, url_args=None):
|
||||||
|
return generate_previous_next_dict(view, service_id, page + 1, 'Next page', url_args or {})
|
||||||
|
|
||||||
|
|
||||||
|
def generate_previous_next_dict(view, service_id, page, title, url_args):
|
||||||
|
return {
|
||||||
|
'url': url_for(view, service_id=service_id, page=page, **url_args),
|
||||||
|
'title': title,
|
||||||
|
'label': 'page {}'.format(page)
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ from freezegun import freeze_time
|
|||||||
from app import format_datetime_relative
|
from app import format_datetime_relative
|
||||||
from app.formatters import email_safe, round_to_significant_figures
|
from app.formatters import email_safe, round_to_significant_figures
|
||||||
from app.utils import (
|
from app.utils import (
|
||||||
generate_next_dict,
|
|
||||||
generate_previous_dict,
|
|
||||||
get_current_financial_year,
|
get_current_financial_year,
|
||||||
get_logo_cdn_domain,
|
get_logo_cdn_domain,
|
||||||
is_less_than_days_ago,
|
is_less_than_days_ago,
|
||||||
@@ -29,25 +27,6 @@ def test_email_safe_return_dot_separated_email_domain(service_name, safe_email):
|
|||||||
assert email_safe(service_name) == safe_email
|
assert email_safe(service_name) == safe_email
|
||||||
|
|
||||||
|
|
||||||
def test_generate_previous_dict(client):
|
|
||||||
ret = generate_previous_dict('main.view_jobs', 'foo', 2, {})
|
|
||||||
assert 'page=1' in ret['url']
|
|
||||||
assert ret['title'] == 'Previous page'
|
|
||||||
assert ret['label'] == 'page 1'
|
|
||||||
|
|
||||||
|
|
||||||
def test_generate_next_dict(client):
|
|
||||||
ret = generate_next_dict('main.view_jobs', 'foo', 2, {})
|
|
||||||
assert 'page=3' in ret['url']
|
|
||||||
assert ret['title'] == 'Next page'
|
|
||||||
assert ret['label'] == 'page 3'
|
|
||||||
|
|
||||||
|
|
||||||
def test_generate_previous_next_dict_adds_other_url_args(client):
|
|
||||||
ret = generate_next_dict('main.view_notifications', 'foo', 2, {'message_type': 'blah'})
|
|
||||||
assert 'notifications/blah' in ret['url']
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_cdn_domain_on_localhost(client, mocker):
|
def test_get_cdn_domain_on_localhost(client, mocker):
|
||||||
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'})
|
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'})
|
||||||
domain = get_logo_cdn_domain()
|
domain = get_logo_cdn_domain()
|
||||||
|
|||||||
20
tests/app/utils/test_pagination.py
Normal file
20
tests/app/utils/test_pagination.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from app.utils.pagination import generate_next_dict, generate_previous_dict
|
||||||
|
|
||||||
|
|
||||||
|
def test_generate_previous_dict(client):
|
||||||
|
ret = generate_previous_dict('main.view_jobs', 'foo', 2, {})
|
||||||
|
assert 'page=1' in ret['url']
|
||||||
|
assert ret['title'] == 'Previous page'
|
||||||
|
assert ret['label'] == 'page 1'
|
||||||
|
|
||||||
|
|
||||||
|
def test_generate_next_dict(client):
|
||||||
|
ret = generate_next_dict('main.view_jobs', 'foo', 2, {})
|
||||||
|
assert 'page=3' in ret['url']
|
||||||
|
assert ret['title'] == 'Next page'
|
||||||
|
assert ret['label'] == 'page 3'
|
||||||
|
|
||||||
|
|
||||||
|
def test_generate_previous_next_dict_adds_other_url_args(client):
|
||||||
|
ret = generate_next_dict('main.view_notifications', 'foo', 2, {'message_type': 'blah'})
|
||||||
|
assert 'notifications/blah' in ret['url']
|
||||||
Reference in New Issue
Block a user