diff --git a/Pipfile b/Pipfile index 5a44b1828..626ccc962 100644 --- a/Pipfile +++ b/Pipfile @@ -5,6 +5,7 @@ name = "pypi" [packages] ago = "~=0.0.95" +black = "==23.7.0" blinker = "~=1.4" exceptiongroup = "==1.1.3" flask = "~=2.3" diff --git a/app/__init__.py b/app/__init__.py index d6c4257bc..ce2c177ca 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -104,18 +104,12 @@ from app.notify_client.organizations_api_client import organizations_client from app.notify_client.performance_dashboard_api_client import ( performance_dashboard_api_client, ) -from app.notify_client.platform_stats_api_client import ( - platform_stats_api_client, -) +from app.notify_client.platform_stats_api_client import platform_stats_api_client from app.notify_client.provider_client import provider_client from app.notify_client.service_api_client import service_api_client from app.notify_client.status_api_client import status_api_client -from app.notify_client.template_folder_api_client import ( - template_folder_api_client, -) -from app.notify_client.template_statistics_api_client import ( - template_statistics_client, -) +from app.notify_client.template_folder_api_client import template_folder_api_client +from app.notify_client.template_statistics_api_client import template_statistics_client from app.notify_client.upload_api_client import upload_api_client from app.notify_client.user_api_client import user_api_client from app.url_converters import ( diff --git a/app/formatters.py b/app/formatters.py index c1eadb657..113b374a4 100644 --- a/app/formatters.py +++ b/app/formatters.py @@ -14,10 +14,7 @@ from flask import Markup, url_for from notifications_utils.field import Field from notifications_utils.formatters import make_quotes_smart from notifications_utils.formatters import nl2br as utils_nl2br -from notifications_utils.recipients import ( - InvalidPhoneError, - validate_phone_number, -) +from notifications_utils.recipients import InvalidPhoneError, validate_phone_number from notifications_utils.take import Take from app.utils.time import parse_naive_dt diff --git a/app/main/forms.py b/app/main/forms.py index aa46da166..2cf8c723d 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -12,10 +12,7 @@ from flask_wtf.file import FileField as FileField_wtf from flask_wtf.file import FileSize from notifications_utils.formatters import strip_all_whitespace from notifications_utils.insensitive_dict import InsensitiveDict -from notifications_utils.recipients import ( - InvalidPhoneError, - validate_phone_number, -) +from notifications_utils.recipients import InvalidPhoneError, validate_phone_number from werkzeug.utils import cached_property from wtforms import ( BooleanField, diff --git a/app/main/validators.py b/app/main/validators.py index dafffbdfd..26e8c838f 100644 --- a/app/main/validators.py +++ b/app/main/validators.py @@ -3,10 +3,7 @@ from abc import ABC, abstractmethod from notifications_utils.field import Field from notifications_utils.formatters import formatted_list -from notifications_utils.recipients import ( - InvalidEmailError, - validate_email_address, -) +from notifications_utils.recipients import InvalidEmailError, validate_email_address from notifications_utils.sanitise_text import SanitiseSMS from wtforms import ValidationError diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py index 7b88656d3..2df60d7e8 100644 --- a/app/main/views/api_keys.py +++ b/app/main/views/api_keys.py @@ -1,12 +1,4 @@ -from flask import ( - Markup, - abort, - flash, - redirect, - render_template, - request, - url_for, -) +from flask import Markup, abort, flash, redirect, render_template, request, url_for from flask_login import current_user from app import ( diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 60404d781..0b7394d68 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -3,15 +3,7 @@ from datetime import datetime from functools import partial from itertools import groupby -from flask import ( - Response, - abort, - jsonify, - render_template, - request, - session, - url_for, -) +from flask import Response, abort, jsonify, render_template, request, session, url_for from flask_login import current_user from notifications_utils.recipients import format_phone_number_human_readable from werkzeug.utils import redirect diff --git a/app/main/views/feedback.py b/app/main/views/feedback.py index d117affbe..e654d2b3d 100644 --- a/app/main/views/feedback.py +++ b/app/main/views/feedback.py @@ -4,19 +4,12 @@ import pytz from flask import redirect, render_template, request, session, url_for from flask_login import current_user from govuk_bank_holidays.bank_holidays import BankHolidays -from notifications_utils.clients.zendesk.zendesk_client import ( - NotifySupportTicket, -) +from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTicket from app import convert_to_boolean, current_service from app.extensions import zendesk_client from app.main import main -from app.main.forms import ( - FeedbackOrProblem, - SupportRedirect, - SupportType, - Triage, -) +from app.main.forms import FeedbackOrProblem, SupportRedirect, SupportType, Triage from app.models.feedback import ( GENERAL_TICKET_TYPE, PROBLEM_TICKET_TYPE, diff --git a/app/main/views/index.py b/app/main/views/index.py index 8ec0fc3ff..c0f293fa2 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -14,10 +14,7 @@ from app import email_branding_client, status_api_client from app.main import main from app.main.forms import FieldWithNoneOption from app.main.views.pricing import CURRENT_SMS_RATE -from app.main.views.sub_navigation_dictionaries import ( - features_nav, - using_notify_nav, -) +from app.main.views.sub_navigation_dictionaries import features_nav, using_notify_nav from app.utils.user import user_is_logged_in diff --git a/app/main/views/invites.py b/app/main/views/invites.py index a0da1ad66..44bc03ce0 100644 --- a/app/main/views/invites.py +++ b/app/main/views/invites.py @@ -5,13 +5,7 @@ from markupsafe import Markup from app.main import main from app.models.organization import Organization from app.models.service import Service -from app.models.user import ( - InvitedOrgUser, - InvitedUser, - OrganizationUsers, - User, - Users, -) +from app.models.user import InvitedOrgUser, InvitedUser, OrganizationUsers, User, Users @main.route("/invitation/") diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index baf9655ef..12e2f0f35 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -14,10 +14,7 @@ from flask import ( url_for, ) from flask_login import current_user -from notifications_utils.template import ( - EmailPreviewTemplate, - SMSBodyPreviewTemplate, -) +from notifications_utils.template import EmailPreviewTemplate, SMSBodyPreviewTemplate from app import ( current_service, diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index cfd6b5488..977e04d1a 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -1,12 +1,4 @@ -from flask import ( - abort, - flash, - redirect, - render_template, - request, - session, - url_for, -) +from flask import abort, flash, redirect, render_template, request, session, url_for from flask_login import current_user from notifications_python_client.errors import HTTPError diff --git a/app/main/views/pricing.py b/app/main/views/pricing.py index bdbc0a454..a5a325d7d 100644 --- a/app/main/views/pricing.py +++ b/app/main/views/pricing.py @@ -1,8 +1,6 @@ from flask import current_app, render_template from flask_login import current_user -from notifications_utils.international_billing_rates import ( - INTERNATIONAL_BILLING_RATES, -) +from notifications_utils.international_billing_rates import INTERNATIONAL_BILLING_RATES from app.main import main from app.main.forms import SearchByNameForm diff --git a/app/main/views/send.py b/app/main/views/send.py index b96479d58..c4b56c301 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -42,11 +42,7 @@ from app.s3_client.s3_csv_client import ( s3upload, set_metadata_on_csv_upload, ) -from app.utils import ( - PermanentRedirect, - should_skip_template_page, - unicode_truncate, -) +from app.utils import PermanentRedirect, should_skip_template_page, unicode_truncate from app.utils.csv import Spreadsheet, get_errors_for_csv from app.utils.templates import get_template from app.utils.user import user_has_permissions diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 855233832..cee6bc353 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -13,9 +13,7 @@ from flask import ( ) from flask_login import current_user from notifications_python_client.errors import HTTPError -from notifications_utils.clients.zendesk.zendesk_client import ( - NotifySupportTicket, -) +from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTicket from app import ( billing_api_client, diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 84958807c..8a1e99130 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -1,14 +1,6 @@ from functools import partial -from flask import ( - abort, - flash, - jsonify, - redirect, - render_template, - request, - url_for, -) +from flask import abort, flash, jsonify, redirect, render_template, request, url_for from flask_login import current_user from notifications_python_client.errors import HTTPError from notifications_utils import SMS_CHAR_COUNT_LIMIT diff --git a/app/main/views/two_factor.py b/app/main/views/two_factor.py index 1f9e52ebb..ffa429a1c 100644 --- a/app/main/views/two_factor.py +++ b/app/main/views/two_factor.py @@ -1,13 +1,6 @@ import json -from flask import ( - current_app, - redirect, - render_template, - request, - session, - url_for, -) +from flask import current_app, redirect, render_template, request, session, url_for from flask_login import current_user from itsdangerous import SignatureExpired from notifications_utils.url_safe_token import check_token diff --git a/app/main/views/verify.py b/app/main/views/verify.py index 25e5d2df0..6f3470a74 100644 --- a/app/main/views/verify.py +++ b/app/main/views/verify.py @@ -1,14 +1,6 @@ import json -from flask import ( - abort, - current_app, - flash, - redirect, - render_template, - session, - url_for, -) +from flask import abort, current_app, flash, redirect, render_template, session, url_for from itsdangerous import SignatureExpired from notifications_utils.url_safe_token import check_token diff --git a/app/models/organization.py b/app/models/organization.py index 2e5977a7d..766ff052b 100644 --- a/app/models/organization.py +++ b/app/models/organization.py @@ -2,12 +2,7 @@ from collections import OrderedDict from werkzeug.utils import cached_property -from app.models import ( - JSONModel, - ModelList, - SerialisedModelCollection, - SortByNameMixin, -) +from app.models import JSONModel, ModelList, SerialisedModelCollection, SortByNameMixin from app.notify_client.email_branding_client import email_branding_client from app.notify_client.organizations_api_client import organizations_client diff --git a/app/models/service.py b/app/models/service.py index 9bd5cc1b4..a32161966 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -3,12 +3,7 @@ from notifications_utils.serialised_model import SerialisedModelCollection from werkzeug.utils import cached_property from app.models import JSONModel, SortByNameMixin -from app.models.job import ( - ImmediateJobs, - PaginatedJobs, - PaginatedUploads, - ScheduledJobs, -) +from app.models.job import ImmediateJobs, PaginatedJobs, PaginatedUploads, ScheduledJobs from app.models.organization import Organization from app.models.user import InvitedUsers, User, Users from app.notify_client.api_key_api_client import api_key_api_client @@ -19,9 +14,7 @@ from app.notify_client.invite_api_client import invite_api_client from app.notify_client.job_api_client import job_api_client from app.notify_client.organizations_api_client import organizations_client from app.notify_client.service_api_client import service_api_client -from app.notify_client.template_folder_api_client import ( - template_folder_api_client, -) +from app.notify_client.template_folder_api_client import template_folder_api_client from app.utils import get_default_sms_sender diff --git a/app/utils/templates.py b/app/utils/templates.py index 5c412047a..b099d0ebc 100644 --- a/app/utils/templates.py +++ b/app/utils/templates.py @@ -1,7 +1,4 @@ -from notifications_utils.template import ( - EmailPreviewTemplate, - SMSPreviewTemplate, -) +from notifications_utils.template import EmailPreviewTemplate, SMSPreviewTemplate def get_sample_template(template_type): diff --git a/setup.cfg b/setup.cfg index 1204e5f05..fd911a0e7 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,11 +2,12 @@ norecursedirs=node_modules bower_components xfail_strict=true -[isort] -line_length=80 -indent=' ' -multi_line_output=3 -known_third_party=notifications_utils,notifications_python_client -known_first_party=app,tests -include_trailing_comma=True -use_parentheses=True +[tool:isort] +profile = black +multi_line_output = 3 + + +[tool:flake8] +exclude = venv*,__pycache__,node_modules,cache,build +max-line-length = 120 +extend_ignore=B306, W504, E203 \ No newline at end of file diff --git a/tests/app/main/views/service_settings/test_email_branding_requests.py b/tests/app/main/views/service_settings/test_email_branding_requests.py index a94e38dbc..90a77dedb 100644 --- a/tests/app/main/views/service_settings/test_email_branding_requests.py +++ b/tests/app/main/views/service_settings/test_email_branding_requests.py @@ -2,9 +2,7 @@ from unittest.mock import ANY, PropertyMock import pytest from flask import url_for -from notifications_utils.clients.zendesk.zendesk_client import ( - NotifySupportTicket, -) +from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTicket from tests import sample_uuid from tests.conftest import ORGANISATION_ID, SERVICE_ONE_ID, normalize_spaces diff --git a/tests/app/main/views/service_settings/test_service_settings.py b/tests/app/main/views/service_settings/test_service_settings.py index a9444bf89..ccc5414fd 100644 --- a/tests/app/main/views/service_settings/test_service_settings.py +++ b/tests/app/main/views/service_settings/test_service_settings.py @@ -8,9 +8,7 @@ import pytest from flask import url_for from freezegun import freeze_time from notifications_python_client.errors import HTTPError -from notifications_utils.clients.zendesk.zendesk_client import ( - NotifySupportTicket, -) +from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTicket import app from tests import ( diff --git a/tests/app/main/views/test_feedback.py b/tests/app/main/views/test_feedback.py index 4f2f1ee4d..fe3a6996c 100644 --- a/tests/app/main/views/test_feedback.py +++ b/tests/app/main/views/test_feedback.py @@ -4,9 +4,7 @@ from unittest.mock import ANY, PropertyMock import pytest from flask import url_for from freezegun import freeze_time -from notifications_utils.clients.zendesk.zendesk_client import ( - NotifySupportTicket, -) +from notifications_utils.clients.zendesk.zendesk_client import NotifySupportTicket from app.main.views.feedback import in_business_hours from app.models.feedback import ( diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index a63beb59c..7f4e4d7b5 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -15,17 +15,9 @@ from notifications_python_client.errors import HTTPError from notifications_utils.recipients import RecipientCSV from notifications_utils.template import SMSPreviewTemplate from xlrd.biffh import XLRDError -from xlrd.xldate import ( - XLDateAmbiguous, - XLDateError, - XLDateNegative, - XLDateTooLarge, -) +from xlrd.xldate import XLDateAmbiguous, XLDateError, XLDateNegative, XLDateTooLarge -from tests import ( - validate_route_permission, - validate_route_permission_with_client, -) +from tests import validate_route_permission, validate_route_permission_with_client from tests.conftest import ( SERVICE_ONE_ID, create_active_caseworking_user, diff --git a/tests/app/notify_client/test_template_statistics_client.py b/tests/app/notify_client/test_template_statistics_client.py index 8640dd3a0..9f24c19a6 100644 --- a/tests/app/notify_client/test_template_statistics_client.py +++ b/tests/app/notify_client/test_template_statistics_client.py @@ -1,8 +1,6 @@ import uuid -from app.notify_client.template_statistics_api_client import ( - TemplateStatisticsApiClient, -) +from app.notify_client.template_statistics_api_client import TemplateStatisticsApiClient def test_template_statistics_client_calls_correct_api_endpoint_for_service(mocker, api_user_active): diff --git a/tests/app/test_navigation.py b/tests/app/test_navigation.py index ee254abf9..ab1b3b036 100644 --- a/tests/app/test_navigation.py +++ b/tests/app/test_navigation.py @@ -9,6 +9,7 @@ from app.navigation import ( Navigation, OrgNavigation, ) + # from tests.conftest import ORGANISATION_ID, SERVICE_ONE_ID, normalize_spaces from tests.conftest import SERVICE_ONE_ID, normalize_spaces diff --git a/tests/app/test_statistics_utils.py b/tests/app/test_statistics_utils.py index 9ce41a8f0..91e5f5313 100644 --- a/tests/app/test_statistics_utils.py +++ b/tests/app/test_statistics_utils.py @@ -1,11 +1,7 @@ import pytest from app.models.job import Job -from app.statistics_utils import ( - add_rates_to, - statistics_by_state, - sum_of_statistics, -) +from app.statistics_utils import add_rates_to, statistics_by_state, sum_of_statistics @pytest.mark.parametrize('delivery_statistics', [