mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-06-24 17:31:19 -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,
|
||||
FAILURE_STATUSES,
|
||||
REQUESTED_STATUSES,
|
||||
generate_next_dict,
|
||||
generate_previous_dict,
|
||||
get_current_financial_year,
|
||||
service_has_permission,
|
||||
)
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -33,18 +33,17 @@ from app.formatters import get_time_left, message_count_noun
|
||||
from app.main import main
|
||||
from app.main.forms import SearchNotificationsForm
|
||||
from app.models.job import Job
|
||||
from app.utils import (
|
||||
generate_next_dict,
|
||||
generate_previous_dict,
|
||||
get_page_from_request,
|
||||
parse_filter_args,
|
||||
set_status_filters,
|
||||
)
|
||||
from app.utils import parse_filter_args, set_status_filters
|
||||
from app.utils.csv import generate_notifications_csv
|
||||
from app.utils.letters import (
|
||||
get_letter_printing_statement,
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -27,12 +27,12 @@ from app.statistics_utils import (
|
||||
get_formatted_percentage,
|
||||
get_formatted_percentage_two_dp,
|
||||
)
|
||||
from app.utils import (
|
||||
from app.utils.csv import Spreadsheet
|
||||
from app.utils.pagination import (
|
||||
generate_next_dict,
|
||||
generate_previous_dict,
|
||||
get_page_from_request,
|
||||
)
|
||||
from app.utils.csv import Spreadsheet
|
||||
from app.utils.user import user_is_platform_admin
|
||||
|
||||
COMPLAINT_THRESHOLD = 0.02
|
||||
|
||||
@@ -45,17 +45,17 @@ from app.s3_client.s3_letter_upload_client import (
|
||||
upload_letter_to_s3,
|
||||
)
|
||||
from app.template_previews import TemplatePreview, sanitise_letter
|
||||
from app.utils import (
|
||||
generate_next_dict,
|
||||
generate_previous_dict,
|
||||
get_page_from_request,
|
||||
unicode_truncate,
|
||||
)
|
||||
from app.utils import unicode_truncate
|
||||
from app.utils.csv import Spreadsheet, get_errors_for_csv
|
||||
from app.utils.letters import (
|
||||
get_letter_printing_statement,
|
||||
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.user import user_has_permissions
|
||||
|
||||
|
||||
@@ -55,32 +55,6 @@ def redirect_to_sign_in(f):
|
||||
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():
|
||||
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.formatters import email_safe, round_to_significant_figures
|
||||
from app.utils import (
|
||||
generate_next_dict,
|
||||
generate_previous_dict,
|
||||
get_current_financial_year,
|
||||
get_logo_cdn_domain,
|
||||
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
|
||||
|
||||
|
||||
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):
|
||||
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'})
|
||||
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