From 55f51e5e303dcf9241b092136253280f41fe5d9a Mon Sep 17 00:00:00 2001 From: Alex Vandiver Date: Sat, 6 Mar 2021 17:56:45 -0800 Subject: [PATCH] isort all imports (#62) * requirements: Add isort. Much like `black`, having an opinionated sorting tool for imports helps keep them consistent and tidy. * isort all python files. --- .github/workflows/test.yml | 3 ++ README.md | 4 +-- pyproject.toml | 5 ++++ requirements.in | 1 + requirements.txt | 4 +++ scripts/replay_api_logs_from_csv.py | 9 +++--- vaccinate/api/admin.py | 1 + vaccinate/api/migrations/0001_initial.py | 2 +- vaccinate/api/models.py | 2 +- vaccinate/api/test_submit_report.py | 5 ++-- vaccinate/api/utils.py | 3 +- vaccinate/api/views.py | 14 ++++++---- vaccinate/auth0login/auth0_utils.py | 2 +- vaccinate/auth0login/auth0backend.py | 1 + vaccinate/auth0login/tests.py | 7 +++-- vaccinate/auth0login/views.py | 5 ++-- vaccinate/config/settings.py | 7 +++-- vaccinate/config/urls.py | 9 +++--- vaccinate/config/wsgi.py | 3 +- vaccinate/conftest.py | 2 +- vaccinate/core/admin.py | 28 ++++++++++--------- vaccinate/core/import_utils.py | 7 +++-- .../commands/import_airtable_locations.py | 5 ++-- .../commands/import_airtable_reports.py | 5 ++-- vaccinate/core/migrations/0001_initial.py | 2 +- .../migrations/0003_populate_ca_counties.py | 1 - .../0006_populate_county_airtable_ids.py | 1 - .../0007_populate_call_request_reasons.py | 1 - .../migrations/0009_callreport_created_at.py | 1 + .../migrations/0011_more_availability_tags.py | 1 - .../0012_location_county_can_be_null.py | 2 +- .../0015_populate_appointmenttag_slug.py | 1 - .../0020_populate_new_reporter_fields.py | 2 +- ...elated_name_call_reports_is_now_reports.py | 2 +- .../migrations/0031_auto_20210303_2019.py | 2 +- vaccinate/core/models.py | 11 ++++---- vaccinate/core/test_admin.py | 3 +- vaccinate/core/test_airtable_import.py | 6 ++-- vaccinate/core/test_core_views.py | 3 +- vaccinate/core/tests.py | 3 +- vaccinate/core/timezone_middleware.py | 2 +- vaccinate/core/views.py | 2 +- 42 files changed, 103 insertions(+), 77 deletions(-) create mode 100644 pyproject.toml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 21dd9ef..b332290 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,6 +37,9 @@ jobs: - name: Run Black run: | black --check --diff . + - name: Run isort + run: | + isort --check . - name: Run tests env: DJANGO_SECRET_KEY: secret for running tests diff --git a/README.md b/README.md index f75c486..9ca7a21 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,6 @@ To run the tests, change directory to the `vaccinate` folder and run `pytest`. ## Code formatting -This repository uses [Black](https://github.com/psf/black) to enforce coding style as part of the CI tests. +This repository uses [Black](https://github.com/psf/black) and [isort](https://pycqa.github.io/isort/) to enforce coding style as part of the CI tests. -Run `black .` in the top-level directory to ensure your code is formatted correctly, then enjoy never having to think about how to best indent your Python code ever again. +Run `black .` and `isort .` in the top-level directory to ensure your code is formatted correctly, then enjoy never having to think about how to best indent your Python code ever again. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a8100aa --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,5 @@ +[tool.isort] +profile = "black" +multi_line_output = 3 + + diff --git a/requirements.in b/requirements.in index 93f3712..1e1c179 100644 --- a/requirements.in +++ b/requirements.in @@ -46,6 +46,7 @@ time-machine # Formatting black +isort # Dependency management pip-tools diff --git a/requirements.txt b/requirements.txt index c636b13..12bcea0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -222,6 +222,10 @@ iniconfig==1.1.1 \ --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest +isort==5.7.0 \ + --hash=sha256:c729845434366216d320e936b8ad6f9d681aab72dc7cbc2d51bedc3582f3ad1e \ + --hash=sha256:fff4f0c04e1825522ce6949973e83110a6e907750cd92d128b0d14aaaadbffdc + # via -r requirements.in libcst==0.3.17 \ --hash=sha256:2766671c107263daa3fc34e39d55134a6fe253701564d7670586f30eee2c201c \ --hash=sha256:4638e4e8f166f4c74df399222d347ce3e1d316e206b550d8a6254d51b4cf7275 diff --git a/scripts/replay_api_logs_from_csv.py b/scripts/replay_api_logs_from_csv.py index fc8f756..52fdc74 100644 --- a/scripts/replay_api_logs_from_csv.py +++ b/scripts/replay_api_logs_from_csv.py @@ -1,12 +1,13 @@ +import csv +import json +import time from collections import defaultdict -from dateutil import parser from urllib.parse import urlencode + import click -import csv import httpx -import json import pytz -import time +from dateutil import parser @click.command() diff --git a/vaccinate/api/admin.py b/vaccinate/api/admin.py index 9313257..b0eca09 100644 --- a/vaccinate/api/admin.py +++ b/vaccinate/api/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin + from .models import ApiLog diff --git a/vaccinate/api/migrations/0001_initial.py b/vaccinate/api/migrations/0001_initial.py index f41709f..1649fc8 100644 --- a/vaccinate/api/migrations/0001_initial.py +++ b/vaccinate/api/migrations/0001_initial.py @@ -1,9 +1,9 @@ # Generated by Django 3.1.7 on 2021-03-03 20:19 import core.fields -from django.db import migrations, models import django.db.models.deletion import django.utils.timezone +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/vaccinate/api/models.py b/vaccinate/api/models.py index b736fc4..1104873 100644 --- a/vaccinate/api/models.py +++ b/vaccinate/api/models.py @@ -1,6 +1,6 @@ +from core.fields import CharTextField from django.db import models from django.utils import timezone -from core.fields import CharTextField class ApiLog(models.Model): diff --git a/vaccinate/api/test_submit_report.py b/vaccinate/api/test_submit_report.py index 6ee87a0..58d4c03 100644 --- a/vaccinate/api/test_submit_report.py +++ b/vaccinate/api/test_submit_report.py @@ -1,8 +1,9 @@ -from core.models import Report, Location -from api.models import ApiLog import json import pathlib + import pytest +from api.models import ApiLog +from core.models import Location, Report tests_dir = pathlib.Path(__file__).parent / "test-data" / "submitReport" diff --git a/vaccinate/api/utils.py b/vaccinate/api/utils.py index 1bae61c..54c96ed 100644 --- a/vaccinate/api/utils.py +++ b/vaccinate/api/utils.py @@ -1,6 +1,7 @@ +import json from functools import wraps + from .models import ApiLog -import json def log_api_requests(view_fn): diff --git a/vaccinate/api/views.py b/vaccinate/api/views.py index 4fa4fbe..bd174e6 100644 --- a/vaccinate/api/views.py +++ b/vaccinate/api/views.py @@ -1,15 +1,17 @@ +import json +from typing import List, Optional + +import pytz from auth0login.auth0_utils import decode_and_verify_jwt +from core.import_utils import derive_appointment_tag, resolve_availability_tags +from core.models import AppointmentTag, AvailabilityTag, Location, Report, Reporter from dateutil import parser from django.http import JsonResponse from django.shortcuts import render from django.views.decorators.csrf import csrf_exempt -from pydantic import BaseModel, validator, ValidationError, Field -from typing import List, Optional -from core.models import AppointmentTag, AvailabilityTag, Location, Report, Reporter -from core.import_utils import derive_appointment_tag, resolve_availability_tags +from pydantic import BaseModel, Field, ValidationError, validator + from .utils import log_api_requests -import json -import pytz class ReportValidator(BaseModel): diff --git a/vaccinate/auth0login/auth0_utils.py b/vaccinate/auth0login/auth0_utils.py index dd5c054..e5b7f9b 100644 --- a/vaccinate/auth0login/auth0_utils.py +++ b/vaccinate/auth0login/auth0_utils.py @@ -1,6 +1,6 @@ +import requests from django.conf import settings from jose import jwt -import requests def decode_and_verify_jwt(jwt_id_token, try_fallback=False): diff --git a/vaccinate/auth0login/auth0backend.py b/vaccinate/auth0login/auth0backend.py index 5aa3089..626f89a 100644 --- a/vaccinate/auth0login/auth0backend.py +++ b/vaccinate/auth0login/auth0backend.py @@ -1,4 +1,5 @@ from social_core.backends.oauth import BaseOAuth2 + from .auth0_utils import decode_and_verify_jwt diff --git a/vaccinate/auth0login/tests.py b/vaccinate/auth0login/tests.py index c466802..b93ce0d 100644 --- a/vaccinate/auth0login/tests.py +++ b/vaccinate/auth0login/tests.py @@ -1,9 +1,10 @@ import datetime -from django.contrib.sessions.models import Session -from django.contrib.auth.models import User -import pytest import urllib +import pytest +from django.contrib.auth.models import User +from django.contrib.sessions.models import Session + @pytest.mark.django_db def test_login_with_auth0_start(client): diff --git a/vaccinate/auth0login/views.py b/vaccinate/auth0login/views.py index 466d617..c3837ec 100644 --- a/vaccinate/auth0login/views.py +++ b/vaccinate/auth0login/views.py @@ -1,7 +1,8 @@ -from django.contrib.auth import logout as log_out -from django.http import HttpResponseRedirect from urllib.parse import urlencode + from django.conf import settings +from django.contrib.auth import logout as log_out +from django.http import HttpResponseRedirect def logout(request): diff --git a/vaccinate/config/settings.py b/vaccinate/config/settings.py index 04deb93..cc2bc74 100644 --- a/vaccinate/config/settings.py +++ b/vaccinate/config/settings.py @@ -1,9 +1,10 @@ -import dj_database_url -from django.conf.locale.en import formats as en_formats +import os from pathlib import Path + +import dj_database_url import sentry_sdk +from django.conf.locale.en import formats as en_formats from sentry_sdk.integrations.django import DjangoIntegration -import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent diff --git a/vaccinate/config/urls.py b/vaccinate/config/urls.py index 8146e40..a66fe9f 100644 --- a/vaccinate/config/urls.py +++ b/vaccinate/config/urls.py @@ -1,11 +1,10 @@ +from api import views as api_views +from auth0login.views import logout +from core import views as core_views from django.contrib import admin from django.http.response import HttpResponsePermanentRedirect -from django.urls import path, include from django.shortcuts import redirect -from auth0login.views import logout -from api import views as api_views -from core import views as core_views - +from django.urls import include, path urlpatterns = [ path("", core_views.index), diff --git a/vaccinate/config/wsgi.py b/vaccinate/config/wsgi.py index 5f22017..27de44b 100644 --- a/vaccinate/config/wsgi.py +++ b/vaccinate/config/wsgi.py @@ -1,9 +1,8 @@ import io import os -from django.core.wsgi import get_wsgi_application - from config.env import load_env +from django.core.wsgi import get_wsgi_application load_env() os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") diff --git a/vaccinate/conftest.py b/vaccinate/conftest.py index a6553d2..90f5fdf 100644 --- a/vaccinate/conftest.py +++ b/vaccinate/conftest.py @@ -1,6 +1,6 @@ -import pytest import datetime +import pytest # Copied from https://vaccinateca.us.auth0.com/.well-known/jwks.json on 24th Feb 2021: MOCK_JWKS = { diff --git a/vaccinate/core/admin.py b/vaccinate/core/admin.py index 094db4c..389567c 100644 --- a/vaccinate/core/admin.py +++ b/vaccinate/core/admin.py @@ -1,24 +1,26 @@ +import json + from django.contrib import admin from django.db.models import Count, Max from django.template.loader import render_to_string -from django.utils.safestring import mark_safe from django.utils.html import escape -import json +from django.utils.safestring import mark_safe + from .models import ( - LocationType, - ProviderType, - Provider, - State, - County, - Location, - Reporter, - AvailabilityTag, AppointmentTag, - Report, - EvaReport, - CallRequestReason, + AvailabilityTag, CallRequest, + CallRequestReason, + County, + EvaReport, + Location, + LocationType, + Provider, + ProviderType, PublishedReport, + Report, + Reporter, + State, ) # Simple models first diff --git a/vaccinate/core/import_utils.py b/vaccinate/core/import_utils.py index 89db606..f403b24 100644 --- a/vaccinate/core/import_utils.py +++ b/vaccinate/core/import_utils.py @@ -1,15 +1,16 @@ from github_contents import GithubContents + from .models import ( AppointmentTag, AvailabilityTag, - Report, + County, Location, - State, LocationType, Provider, - County, ProviderType, + Report, Reporter, + State, ) FIX_COUNTIES = { diff --git a/vaccinate/core/management/commands/import_airtable_locations.py b/vaccinate/core/management/commands/import_airtable_locations.py index 44ef862..b1e5a30 100644 --- a/vaccinate/core/management/commands/import_airtable_locations.py +++ b/vaccinate/core/management/commands/import_airtable_locations.py @@ -1,7 +1,8 @@ -from django.core.management.base import BaseCommand, CommandError -from core.import_utils import load_airtable_backup, import_airtable_location import json +from core.import_utils import import_airtable_location, load_airtable_backup +from django.core.management.base import BaseCommand, CommandError + class Command(BaseCommand): def add_arguments(self, parser): diff --git a/vaccinate/core/management/commands/import_airtable_reports.py b/vaccinate/core/management/commands/import_airtable_reports.py index 57677de..f70cb67 100644 --- a/vaccinate/core/management/commands/import_airtable_reports.py +++ b/vaccinate/core/management/commands/import_airtable_reports.py @@ -1,7 +1,8 @@ +import json + +from core.import_utils import import_airtable_report, load_airtable_backup from core.models import AvailabilityTag from django.core.management.base import BaseCommand, CommandError -from core.import_utils import load_airtable_backup, import_airtable_report -import json class Command(BaseCommand): diff --git a/vaccinate/core/migrations/0001_initial.py b/vaccinate/core/migrations/0001_initial.py index 50cc3bd..1d5db62 100644 --- a/vaccinate/core/migrations/0001_initial.py +++ b/vaccinate/core/migrations/0001_initial.py @@ -1,8 +1,8 @@ # Generated by Django 3.1.7 on 2021-02-24 02:45 import core.fields -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/vaccinate/core/migrations/0003_populate_ca_counties.py b/vaccinate/core/migrations/0003_populate_ca_counties.py index fe42def..672df79 100644 --- a/vaccinate/core/migrations/0003_populate_ca_counties.py +++ b/vaccinate/core/migrations/0003_populate_ca_counties.py @@ -1,6 +1,5 @@ from django.db import migrations - counties = { "06001": "Alameda", "06003": "Alpine", diff --git a/vaccinate/core/migrations/0006_populate_county_airtable_ids.py b/vaccinate/core/migrations/0006_populate_county_airtable_ids.py index f29cb1b..a60dcf6 100644 --- a/vaccinate/core/migrations/0006_populate_county_airtable_ids.py +++ b/vaccinate/core/migrations/0006_populate_county_airtable_ids.py @@ -1,6 +1,5 @@ from django.db import migrations - counties = { "Glenn": "rec0QOd7EXzSuZZvN", "Shasta": "rec1rvcyGSS6AgQEq", diff --git a/vaccinate/core/migrations/0007_populate_call_request_reasons.py b/vaccinate/core/migrations/0007_populate_call_request_reasons.py index 3d65de2..9478e13 100644 --- a/vaccinate/core/migrations/0007_populate_call_request_reasons.py +++ b/vaccinate/core/migrations/0007_populate_call_request_reasons.py @@ -1,6 +1,5 @@ from django.db import migrations - reasons = ("Stale report", "New location", "Eva tip", "Data corrections tip") diff --git a/vaccinate/core/migrations/0009_callreport_created_at.py b/vaccinate/core/migrations/0009_callreport_created_at.py index d00168f..d5cc94d 100644 --- a/vaccinate/core/migrations/0009_callreport_created_at.py +++ b/vaccinate/core/migrations/0009_callreport_created_at.py @@ -1,6 +1,7 @@ # Generated by Django 3.1.7 on 2021-02-25 01:29 import datetime + from django.db import migrations, models diff --git a/vaccinate/core/migrations/0011_more_availability_tags.py b/vaccinate/core/migrations/0011_more_availability_tags.py index 5ed5e2b..5bb7a2d 100644 --- a/vaccinate/core/migrations/0011_more_availability_tags.py +++ b/vaccinate/core/migrations/0011_more_availability_tags.py @@ -1,6 +1,5 @@ from django.db import migrations - availability_tags = ( ( "No: may be a vaccination site in the future", diff --git a/vaccinate/core/migrations/0012_location_county_can_be_null.py b/vaccinate/core/migrations/0012_location_county_can_be_null.py index e418dfe..65ebcde 100644 --- a/vaccinate/core/migrations/0012_location_county_can_be_null.py +++ b/vaccinate/core/migrations/0012_location_county_can_be_null.py @@ -1,7 +1,7 @@ # Generated by Django 3.1.7 on 2021-02-26 07:23 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/vaccinate/core/migrations/0015_populate_appointmenttag_slug.py b/vaccinate/core/migrations/0015_populate_appointmenttag_slug.py index 116ba99..a9dc6ea 100644 --- a/vaccinate/core/migrations/0015_populate_appointmenttag_slug.py +++ b/vaccinate/core/migrations/0015_populate_appointmenttag_slug.py @@ -1,6 +1,5 @@ from django.db import migrations - appointment_tag_slugs = { "County website": "county_website", "myturn.ca.gov": "myturn_ca_gov", diff --git a/vaccinate/core/migrations/0020_populate_new_reporter_fields.py b/vaccinate/core/migrations/0020_populate_new_reporter_fields.py index 004910f..e2d9649 100644 --- a/vaccinate/core/migrations/0020_populate_new_reporter_fields.py +++ b/vaccinate/core/migrations/0020_populate_new_reporter_fields.py @@ -1,5 +1,5 @@ from django.db import migrations -from django.db.models import F, Value, CharField +from django.db.models import CharField, F, Value from django.db.models.functions import Concat diff --git a/vaccinate/core/migrations/0023_related_name_call_reports_is_now_reports.py b/vaccinate/core/migrations/0023_related_name_call_reports_is_now_reports.py index ef32e7c..de674fa 100644 --- a/vaccinate/core/migrations/0023_related_name_call_reports_is_now_reports.py +++ b/vaccinate/core/migrations/0023_related_name_call_reports_is_now_reports.py @@ -1,7 +1,7 @@ # Generated by Django 3.1.7 on 2021-03-01 22:37 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/vaccinate/core/migrations/0031_auto_20210303_2019.py b/vaccinate/core/migrations/0031_auto_20210303_2019.py index d62c051..ff13fab 100644 --- a/vaccinate/core/migrations/0031_auto_20210303_2019.py +++ b/vaccinate/core/migrations/0031_auto_20210303_2019.py @@ -1,7 +1,7 @@ # Generated by Django 3.1.7 on 2021-03-03 20:19 -from django.db import migrations, models import django.utils.timezone +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/vaccinate/core/models.py b/vaccinate/core/models.py index 29b3945..d3d5124 100644 --- a/vaccinate/core/models.py +++ b/vaccinate/core/models.py @@ -1,11 +1,12 @@ import datetime +import uuid + +import pytz from django.db import models -from django.utils import timezone -from django.utils import dateformat -from .fields import CharTextField +from django.utils import dateformat, timezone + from .baseconverter import pid -import pytz -import uuid +from .fields import CharTextField class LocationType(models.Model): diff --git a/vaccinate/core/test_admin.py b/vaccinate/core/test_admin.py index 2fa4fcf..763bcba 100644 --- a/vaccinate/core/test_admin.py +++ b/vaccinate/core/test_admin.py @@ -1,6 +1,7 @@ -from .models import Location import pytest +from .models import Location + @pytest.fixture() def admin_client(client, admin_user): diff --git a/vaccinate/core/test_airtable_import.py b/vaccinate/core/test_airtable_import.py index aac2df5..7651952 100644 --- a/vaccinate/core/test_airtable_import.py +++ b/vaccinate/core/test_airtable_import.py @@ -1,11 +1,11 @@ -from .models import Location, Report +import pytest + from .import_utils import ( derive_appointment_tag, import_airtable_location, import_airtable_report, ) -import pytest - +from .models import Location, Report location_json = { "# Data corrections": 0, diff --git a/vaccinate/core/test_core_views.py b/vaccinate/core/test_core_views.py index 72567c5..d6afb1b 100644 --- a/vaccinate/core/test_core_views.py +++ b/vaccinate/core/test_core_views.py @@ -1,6 +1,7 @@ +import pytest from django.conf import settings + from .models import State -import pytest @pytest.mark.django_db diff --git a/vaccinate/core/tests.py b/vaccinate/core/tests.py index 68fbf3f..35babb1 100644 --- a/vaccinate/core/tests.py +++ b/vaccinate/core/tests.py @@ -1,6 +1,7 @@ +import pytest from django.conf import settings + from .models import State -import pytest @pytest.mark.django_db diff --git a/vaccinate/core/timezone_middleware.py b/vaccinate/core/timezone_middleware.py index b344077..6a0508e 100644 --- a/vaccinate/core/timezone_middleware.py +++ b/vaccinate/core/timezone_middleware.py @@ -1,5 +1,5 @@ -from django.utils import timezone import pytz +from django.utils import timezone class TimezoneMiddleware: diff --git a/vaccinate/core/views.py b/vaccinate/core/views.py index b056ecc..a1ade83 100644 --- a/vaccinate/core/views.py +++ b/vaccinate/core/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render, redirect +from django.shortcuts import redirect, render def index(request):