From bcf876c686e0bbd938e3e4e1f9427e18569dede9 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 29 Oct 2018 14:46:42 +0000 Subject: [PATCH] Use isort for consistent import ordering (#156) --- requirements.txt | 1 + scripts/lint | 1 + scripts/test | 1 + starlette/datastructures.py | 3 ++- starlette/debug.py | 2 +- starlette/endpoints.py | 7 ++++--- starlette/exceptions.py | 9 +++++---- starlette/formparsers.py | 4 ++-- starlette/graphql.py | 9 +++++---- starlette/lifespan.py | 2 +- starlette/middleware/base.py | 3 ++- starlette/middleware/cors.py | 8 ++++---- starlette/middleware/gzip.py | 5 +++-- starlette/middleware/trustedhost.py | 4 ++-- starlette/middleware/wsgi.py | 1 + starlette/requests.py | 7 ++++--- starlette/responses.py | 10 +++++----- starlette/routing.py | 12 ++++++------ starlette/staticfiles.py | 4 ++-- starlette/testclient.py | 8 ++++---- starlette/types.py | 1 - starlette/websockets.py | 3 +-- tests/middleware/test_base.py | 3 ++- tests/middleware/test_wsgi.py | 4 +++- tests/test_applications.py | 9 +++++---- tests/test_background.py | 7 ++++--- tests/test_datastructures.py | 2 +- tests/test_debug.py | 5 +++-- tests/test_endpoints.py | 7 ++++--- tests/test_exceptions.py | 5 +++-- tests/test_formparsers.py | 9 +++++---- tests/test_graphql.py | 3 ++- tests/test_lifespan.py | 2 +- tests/test_requests.py | 9 +++++---- tests/test_responses.py | 12 +++++++----- tests/test_routing.py | 11 ++++++----- tests/test_staticfiles.py | 3 ++- tests/test_websockets.py | 3 ++- 38 files changed, 112 insertions(+), 87 deletions(-) diff --git a/requirements.txt b/requirements.txt index 86daff9a..e4b392a8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,6 +8,7 @@ ujson # Testing black codecov +isort mypy pytest pytest-cov diff --git a/scripts/lint b/scripts/lint index 13355a6a..b21618d6 100755 --- a/scripts/lint +++ b/scripts/lint @@ -8,3 +8,4 @@ fi set -x ${PREFIX}black starlette tests +${PREFIX}isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --combine-as --line-width 88 --recursive --apply starlette tests diff --git a/scripts/test b/scripts/test index 09f9dea5..5c9df8e0 100755 --- a/scripts/test +++ b/scripts/test @@ -17,3 +17,4 @@ if [ "${PYTHON_VERSION}" = '3.7' ]; then else ${PREFIX}black starlette tests --check fi +${PREFIX}isort --multi-line=3 --trailing-comma --force-grid-wrap=0 --combine-as --line-width 88 --recursive --check-only starlette tests diff --git a/starlette/datastructures.py b/starlette/datastructures.py index 55e90fbe..21ebe0de 100644 --- a/starlette/datastructures.py +++ b/starlette/datastructures.py @@ -1,6 +1,7 @@ import typing +from urllib.parse import ParseResult, parse_qsl, unquote, urlencode, urlparse + from starlette.types import Scope -from urllib.parse import parse_qsl, unquote, urlencode, urlparse, ParseResult class URL: diff --git a/starlette/debug.py b/starlette/debug.py index 11eca439..1db7d58c 100644 --- a/starlette/debug.py +++ b/starlette/debug.py @@ -4,7 +4,7 @@ import typing from starlette.requests import Request from starlette.responses import HTMLResponse, PlainTextResponse, Response -from starlette.types import Scope, Receive, Send, Message, ASGIApp, ASGIInstance +from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Scope, Send def get_debug_response(request: Request, exc: Exception) -> Response: diff --git a/starlette/endpoints.py b/starlette/endpoints.py index 27559d16..629a08da 100644 --- a/starlette/endpoints.py +++ b/starlette/endpoints.py @@ -1,12 +1,13 @@ import asyncio -import typing import json +import typing + from starlette import status from starlette.exceptions import HTTPException from starlette.requests import Request +from starlette.responses import PlainTextResponse, Response +from starlette.types import Message, Receive, Scope, Send from starlette.websockets import WebSocket -from starlette.responses import Response, PlainTextResponse -from starlette.types import Message, Receive, Send, Scope class HTTPEndpoint: diff --git a/starlette/exceptions.py b/starlette/exceptions.py index e105b29f..a8d7142b 100644 --- a/starlette/exceptions.py +++ b/starlette/exceptions.py @@ -1,11 +1,12 @@ -from starlette.debug import get_debug_response -from starlette.requests import Request -from starlette.responses import PlainTextResponse, Response -from starlette.types import ASGIApp, ASGIInstance, Receive, Message, Send, Scope import asyncio import http import typing +from starlette.debug import get_debug_response +from starlette.requests import Request +from starlette.responses import PlainTextResponse, Response +from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Scope, Send + class HTTPException(Exception): def __init__(self, status_code: int, detail: str = None) -> None: diff --git a/starlette/formparsers.py b/starlette/formparsers.py index 6d83320d..d5bdc229 100644 --- a/starlette/formparsers.py +++ b/starlette/formparsers.py @@ -1,7 +1,7 @@ -import io -import typing import asyncio +import io import tempfile +import typing from enum import Enum from urllib.parse import unquote diff --git a/starlette/graphql.py b/starlette/graphql.py index acd35389..bcab8ddd 100644 --- a/starlette/graphql.py +++ b/starlette/graphql.py @@ -1,12 +1,13 @@ -from starlette import status -from starlette.responses import PlainTextResponse, Response, JSONResponse, HTMLResponse -from starlette.requests import Request -from starlette.types import ASGIInstance, Receive, Scope, Send import asyncio import functools import json import typing +from starlette import status +from starlette.requests import Request +from starlette.responses import HTMLResponse, JSONResponse, PlainTextResponse, Response +from starlette.types import ASGIInstance, Receive, Scope, Send + try: import graphene from graphql.execution.executors.asyncio import AsyncioExecutor diff --git a/starlette/lifespan.py b/starlette/lifespan.py index b25ec8ca..ebea8880 100644 --- a/starlette/lifespan.py +++ b/starlette/lifespan.py @@ -3,8 +3,8 @@ import logging import traceback import typing from types import TracebackType -from starlette.types import ASGIApp, ASGIInstance, Receive, Message, Send +from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Send STATE_TRANSITION_ERROR = "Got invalid state transition on lifespan protocol." diff --git a/starlette/middleware/base.py b/starlette/middleware/base.py index eb6c4ad8..22e2c3c0 100644 --- a/starlette/middleware/base.py +++ b/starlette/middleware/base.py @@ -1,9 +1,10 @@ import asyncio import functools import typing + from starlette.requests import Request from starlette.responses import StreamingResponse -from starlette.types import ASGIApp, ASGIInstance, Scope, Receive, Send +from starlette.types import ASGIApp, ASGIInstance, Receive, Scope, Send class BaseHTTPMiddleware: diff --git a/starlette/middleware/cors.py b/starlette/middleware/cors.py index 9b00961e..6b7b9c1e 100644 --- a/starlette/middleware/cors.py +++ b/starlette/middleware/cors.py @@ -1,10 +1,10 @@ -from starlette.datastructures import Headers, MutableHeaders, URL -from starlette.responses import PlainTextResponse -from starlette.types import ASGIApp, ASGIInstance, Receive, Scope, Send, Message import functools -import typing import re +import typing +from starlette.datastructures import URL, Headers, MutableHeaders +from starlette.responses import PlainTextResponse +from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Scope, Send ALL_METHODS = ("DELETE", "GET", "OPTIONS", "PATCH", "POST", "PUT") diff --git a/starlette/middleware/gzip.py b/starlette/middleware/gzip.py index 73113aff..3f3920bc 100644 --- a/starlette/middleware/gzip.py +++ b/starlette/middleware/gzip.py @@ -1,9 +1,10 @@ -from starlette.datastructures import Headers, MutableHeaders -from starlette.types import ASGIApp, ASGIInstance, Scope, Receive, Send, Message import gzip import io import typing +from starlette.datastructures import Headers, MutableHeaders +from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Scope, Send + class GZipMiddleware: def __init__(self, app: ASGIApp, minimum_size: int = 500) -> None: diff --git a/starlette/middleware/trustedhost.py b/starlette/middleware/trustedhost.py index 2c30b0cb..5f733dc1 100644 --- a/starlette/middleware/trustedhost.py +++ b/starlette/middleware/trustedhost.py @@ -1,8 +1,8 @@ +import typing + from starlette.datastructures import Headers from starlette.responses import PlainTextResponse from starlette.types import ASGIApp, ASGIInstance, Scope -import typing - ENFORCE_DOMAIN_WILDCARD = "Domain wildcard patterns must be like '*.example.com'." diff --git a/starlette/middleware/wsgi.py b/starlette/middleware/wsgi.py index b8c79a03..8e97db47 100644 --- a/starlette/middleware/wsgi.py +++ b/starlette/middleware/wsgi.py @@ -3,6 +3,7 @@ import io import sys import typing from concurrent.futures import ThreadPoolExecutor + from starlette.types import ASGIApp, ASGIInstance, Message, Receive, Scope, Send diff --git a/starlette/requests.py b/starlette/requests.py index cfbd81ab..582862a2 100644 --- a/starlette/requests.py +++ b/starlette/requests.py @@ -1,11 +1,12 @@ -import typing +import http.cookies import json +import typing from collections.abc import Mapping from urllib.parse import unquote -import http.cookies + from starlette.datastructures import URL, Headers, QueryParams from starlette.formparsers import FormParser, MultiPartParser -from starlette.types import Scope, Receive, Message +from starlette.types import Message, Receive, Scope try: from multipart.multipart import parse_options_header diff --git a/starlette/responses.py b/starlette/responses.py index 09ac58f5..5438094c 100644 --- a/starlette/responses.py +++ b/starlette/responses.py @@ -1,15 +1,15 @@ -import os -import json -import stat -import typing import hashlib import http.cookies +import json +import os +import stat +import typing from email.utils import formatdate from mimetypes import guess_type from urllib.parse import quote_plus from starlette.background import BackgroundTask -from starlette.datastructures import MutableHeaders, URL +from starlette.datastructures import URL, MutableHeaders from starlette.types import Receive, Send try: diff --git a/starlette/routing.py b/starlette/routing.py index bb55fd1c..63e8ff50 100644 --- a/starlette/routing.py +++ b/starlette/routing.py @@ -1,16 +1,16 @@ +import asyncio +import inspect import re import typing -import inspect -import asyncio from concurrent.futures import ThreadPoolExecutor -from starlette.requests import Request from starlette.datastructures import URL from starlette.exceptions import HTTPException -from starlette.responses import PlainTextResponse -from starlette.types import Scope, ASGIApp, ASGIInstance, Send, Receive -from starlette.websockets import WebSocket, WebSocketClose from starlette.graphql import GraphQLApp +from starlette.requests import Request +from starlette.responses import PlainTextResponse +from starlette.types import ASGIApp, ASGIInstance, Receive, Scope, Send +from starlette.websockets import WebSocket, WebSocketClose class NoMatchFound(Exception): diff --git a/starlette/staticfiles.py b/starlette/staticfiles.py index b9b54cfe..8a7527a6 100644 --- a/starlette/staticfiles.py +++ b/starlette/staticfiles.py @@ -3,8 +3,8 @@ import stat from aiofiles.os import stat as aio_stat -from starlette.responses import PlainTextResponse, FileResponse, Response -from starlette.types import Send, Receive, Scope, ASGIInstance +from starlette.responses import FileResponse, PlainTextResponse, Response +from starlette.types import ASGIInstance, Receive, Scope, Send class StaticFiles: diff --git a/starlette/testclient.py b/starlette/testclient.py index d7c182ba..006a0894 100644 --- a/starlette/testclient.py +++ b/starlette/testclient.py @@ -2,15 +2,15 @@ import asyncio import http import io import json +import queue import threading import typing +from urllib.parse import unquote, urljoin, urlparse + import requests -import queue -from urllib.parse import unquote, urlparse, urljoin +from starlette.types import ASGIApp, Message, Scope from starlette.websockets import WebSocketDisconnect -from starlette.types import Message, Scope, ASGIApp - # Annotations for `Session.request()` Cookies = typing.Union[ diff --git a/starlette/types.py b/starlette/types.py index c4e8eb11..c4efdcf5 100644 --- a/starlette/types.py +++ b/starlette/types.py @@ -1,6 +1,5 @@ import typing - Scope = typing.MutableMapping[str, typing.Any] Message = typing.MutableMapping[str, typing.Any] diff --git a/starlette/websockets.py b/starlette/websockets.py index 45431716..a33b38ad 100644 --- a/starlette/websockets.py +++ b/starlette/websockets.py @@ -1,12 +1,11 @@ import enum import json import typing - from collections.abc import Mapping from urllib.parse import unquote from starlette.datastructures import URL, Headers, QueryParams -from starlette.types import Scope, Receive, Send, Message +from starlette.types import Message, Receive, Scope, Send class WebSocketState(enum.Enum): diff --git a/tests/middleware/test_base.py b/tests/middleware/test_base.py index 860cd74b..f62059ed 100644 --- a/tests/middleware/test_base.py +++ b/tests/middleware/test_base.py @@ -1,8 +1,9 @@ +import pytest + from starlette.applications import Starlette from starlette.middleware.base import BaseHTTPMiddleware from starlette.responses import PlainTextResponse from starlette.testclient import TestClient -import pytest class CustomMiddleware(BaseHTTPMiddleware): diff --git a/tests/middleware/test_wsgi.py b/tests/middleware/test_wsgi.py index dfd51834..58ddefc0 100644 --- a/tests/middleware/test_wsgi.py +++ b/tests/middleware/test_wsgi.py @@ -1,6 +1,8 @@ import io -import pytest import sys + +import pytest + from starlette.middleware.wsgi import WSGIMiddleware, build_environ from starlette.testclient import TestClient diff --git a/tests/test_applications.py b/tests/test_applications.py index b718bf19..323914a0 100644 --- a/tests/test_applications.py +++ b/tests/test_applications.py @@ -1,13 +1,14 @@ +import os + from starlette.applications import Starlette from starlette.datastructures import Headers +from starlette.endpoints import HTTPEndpoint from starlette.exceptions import HTTPException +from starlette.lifespan import LifespanContext from starlette.responses import JSONResponse, PlainTextResponse -from starlette.routing import Router, Route, Mount, WebSocketRoute +from starlette.routing import Mount, Route, Router, WebSocketRoute from starlette.staticfiles import StaticFiles from starlette.testclient import TestClient -from starlette.endpoints import HTTPEndpoint -from starlette.lifespan import LifespanContext -import os class TrustedHostMiddleware: diff --git a/tests/test_background.py b/tests/test_background.py index 6552266d..95f26780 100644 --- a/tests/test_background.py +++ b/tests/test_background.py @@ -1,8 +1,9 @@ -from starlette.responses import Response -from starlette.background import BackgroundTask -from starlette.testclient import TestClient import asyncio +from starlette.background import BackgroundTask +from starlette.responses import Response +from starlette.testclient import TestClient + def test_async_task(): TASK_COMPLETE = False diff --git a/tests/test_datastructures.py b/tests/test_datastructures.py index 3533e911..e4936918 100644 --- a/tests/test_datastructures.py +++ b/tests/test_datastructures.py @@ -1,4 +1,4 @@ -from starlette.datastructures import Headers, MutableHeaders, QueryParams, URL +from starlette.datastructures import URL, Headers, MutableHeaders, QueryParams def test_url(): diff --git a/tests/test_debug.py b/tests/test_debug.py index 700c836d..48f71162 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -1,7 +1,8 @@ +import pytest + +from starlette.debug import DebugMiddleware from starlette.responses import Response from starlette.testclient import TestClient -from starlette.debug import DebugMiddleware -import pytest def test_debug_text(): diff --git a/tests/test_endpoints.py b/tests/test_endpoints.py index e398ddb5..69366d31 100644 --- a/tests/test_endpoints.py +++ b/tests/test_endpoints.py @@ -1,8 +1,9 @@ import pytest -from starlette.responses import PlainTextResponse -from starlette.routing import Router, Route -from starlette.testclient import TestClient + from starlette.endpoints import HTTPEndpoint, WebSocketEndpoint +from starlette.responses import PlainTextResponse +from starlette.routing import Route, Router +from starlette.testclient import TestClient class Homepage(HTTPEndpoint): diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index cbf55d8a..51de7ff1 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -1,8 +1,9 @@ +import pytest + from starlette.exceptions import ExceptionMiddleware, HTTPException from starlette.responses import PlainTextResponse -from starlette.routing import Router, Route, WebSocketRoute +from starlette.routing import Route, Router, WebSocketRoute from starlette.testclient import TestClient -import pytest def raise_runtime_error(request): diff --git a/tests/test_formparsers.py b/tests/test_formparsers.py index 8d4bfc27..bb5207a1 100644 --- a/tests/test_formparsers.py +++ b/tests/test_formparsers.py @@ -1,9 +1,10 @@ -from starlette.formparsers import UploadFile -from starlette.responses import JSONResponse -from starlette.requests import Request -from starlette.testclient import TestClient import os +from starlette.formparsers import UploadFile +from starlette.requests import Request +from starlette.responses import JSONResponse +from starlette.testclient import TestClient + class ForceMultipartDict(dict): def __bool__(self): diff --git a/tests/test_graphql.py b/tests/test_graphql.py index c9341ae3..5d8c2441 100644 --- a/tests/test_graphql.py +++ b/tests/test_graphql.py @@ -1,8 +1,9 @@ +import graphene from graphql.execution.executors.asyncio import AsyncioExecutor + from starlette.applications import Starlette from starlette.graphql import GraphQLApp from starlette.testclient import TestClient -import graphene class Query(graphene.ObjectType): diff --git a/tests/test_lifespan.py b/tests/test_lifespan.py index 7b7372dc..cc367517 100644 --- a/tests/test_lifespan.py +++ b/tests/test_lifespan.py @@ -1,5 +1,5 @@ from starlette.applications import Starlette -from starlette.lifespan import LifespanHandler, LifespanContext +from starlette.lifespan import LifespanContext, LifespanHandler def test_lifespan_handler(): diff --git a/tests/test_requests.py b/tests/test_requests.py index ef665188..755603f4 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1,10 +1,11 @@ -from starlette.responses import JSONResponse -from starlette.testclient import TestClient -from starlette.requests import Request, ClientDisconnect -from starlette.responses import Response import asyncio + import pytest +from starlette.requests import ClientDisconnect, Request +from starlette.responses import JSONResponse, Response +from starlette.testclient import TestClient + def test_request_url(): def app(scope): diff --git a/tests/test_responses.py b/tests/test_responses.py index 63d50767..6d002844 100644 --- a/tests/test_responses.py +++ b/tests/test_responses.py @@ -1,3 +1,10 @@ +import asyncio +import os + +import pytest + +from starlette import status +from starlette.requests import Request from starlette.responses import ( FileResponse, RedirectResponse, @@ -5,12 +12,7 @@ from starlette.responses import ( StreamingResponse, UJSONResponse, ) -from starlette.requests import Request from starlette.testclient import TestClient -from starlette import status -import asyncio -import pytest -import os def test_text_response(): diff --git a/tests/test_routing.py b/tests/test_routing.py index 725f3691..dc84d581 100644 --- a/tests/test_routing.py +++ b/tests/test_routing.py @@ -1,10 +1,11 @@ -from starlette.responses import Response -from starlette.testclient import TestClient -from starlette.exceptions import ExceptionMiddleware -from starlette.routing import Route, Mount, NoMatchFound, Router, WebSocketRoute -from starlette.websockets import WebSocket, WebSocketDisconnect import pytest +from starlette.exceptions import ExceptionMiddleware +from starlette.responses import Response +from starlette.routing import Mount, NoMatchFound, Route, Router, WebSocketRoute +from starlette.testclient import TestClient +from starlette.websockets import WebSocket, WebSocketDisconnect + def homepage(request): return Response("Hello, world", media_type="text/plain") diff --git a/tests/test_staticfiles.py b/tests/test_staticfiles.py index bc7ef0fb..9d12de89 100644 --- a/tests/test_staticfiles.py +++ b/tests/test_staticfiles.py @@ -1,8 +1,9 @@ import os + import pytest -from starlette.testclient import TestClient from starlette.staticfiles import StaticFiles +from starlette.testclient import TestClient def test_staticfiles(tmpdir): diff --git a/tests/test_websockets.py b/tests/test_websockets.py index 61c25f4d..c53bf943 100644 --- a/tests/test_websockets.py +++ b/tests/test_websockets.py @@ -1,7 +1,8 @@ import pytest + +from starlette import status from starlette.testclient import TestClient from starlette.websockets import WebSocket, WebSocketDisconnect -from starlette import status def test_websocket_url():