From 48d1be87a4138da88e95324761febc45d172394d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maty=C3=A1=C5=A1=20Richter?= Date: Tue, 23 Nov 2021 08:13:11 +0100 Subject: [PATCH] Added codestyle check and lint to the build action (#798) * Applied `make format` * Added format-check to makefile * Added a "Check codestyle" step to the build action. * Rerun `make format` * Added a "lint" target to makefile * Added lint step to the build action * Added W503 to the list of ignored flake8 errors. See https://www.flake8rules.com/rules/W503.html --- .github/workflows/build.yml | 4 ++++ Makefile | 12 ++++++++++++ .../src/cookbook_create_user_programmatically.py | 3 +-- fastapi_users/router/register.py | 5 ++++- fastapi_users/router/reset.py | 6 +++++- fastapi_users/router/users.py | 8 ++++---- fastapi_users/router/verify.py | 6 +++++- setup.cfg | 4 ++-- tests/test_router_auth.py | 14 ++------------ tests/test_router_register.py | 4 +--- tests/test_router_reset.py | 16 ++++------------ tests/test_router_users.py | 11 ++--------- 12 files changed, 46 insertions(+), 47 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6ece670e..e58f508f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,6 +20,10 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.dev.txt + - name: Check codestyle + run: make format-check + - name: Lint + run: make lint - name: Test with pytest env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/Makefile b/Makefile index dc81a0d4..26514c26 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,18 @@ isort-docs: format: isort-src isort-docs black . +isort-src-check: + isort --check-only ./fastapi_users ./tests + +isort-docs-check: + isort --check-only ./docs/src -o fastapi_users + +format-check: isort-src-check isort-docs-check + black --check . + +lint: + flake8 ./fastapi_users ./tests + test: pytest --cov=fastapi_users/ --cov-report=term-missing --cov-fail-under=100 diff --git a/docs/src/cookbook_create_user_programmatically.py b/docs/src/cookbook_create_user_programmatically.py index 9fb3a93e..b9824752 100644 --- a/docs/src/cookbook_create_user_programmatically.py +++ b/docs/src/cookbook_create_user_programmatically.py @@ -1,10 +1,9 @@ import contextlib -from fastapi_users.manager import UserAlreadyExists - from app.db import get_user_db from app.models import UserCreate from app.users import get_user_manager +from fastapi_users.manager import UserAlreadyExists get_user_db_context = contextlib.asynccontextmanager(get_user_db) get_user_manager_context = contextlib.asynccontextmanager(get_user_manager) diff --git a/fastapi_users/router/register.py b/fastapi_users/router/register.py index 4655580b..b20093c5 100644 --- a/fastapi_users/router/register.py +++ b/fastapi_users/router/register.py @@ -21,7 +21,10 @@ def get_register_router( router = APIRouter() @router.post( - "/register", response_model=user_model, status_code=status.HTTP_201_CREATED, name="register:register" + "/register", + response_model=user_model, + status_code=status.HTTP_201_CREATED, + name="register:register", ) async def register( request: Request, diff --git a/fastapi_users/router/reset.py b/fastapi_users/router/reset.py index e3c38d9d..fe55364d 100644 --- a/fastapi_users/router/reset.py +++ b/fastapi_users/router/reset.py @@ -19,7 +19,11 @@ def get_reset_password_router( """Generate a router with the reset password routes.""" router = APIRouter() - @router.post("/forgot-password", status_code=status.HTTP_202_ACCEPTED, name="reset:forgot_password") + @router.post( + "/forgot-password", + status_code=status.HTTP_202_ACCEPTED, + name="reset:forgot_password", + ) async def forgot_password( request: Request, email: EmailStr = Body(..., embed=True), diff --git a/fastapi_users/router/users.py b/fastapi_users/router/users.py index 511fe25e..2c3142b2 100644 --- a/fastapi_users/router/users.py +++ b/fastapi_users/router/users.py @@ -52,7 +52,7 @@ def get_users_router( "/me", response_model=user_model, dependencies=[Depends(get_current_active_user)], - name="users:current_user" + name="users:current_user", ) async def update_me( request: Request, @@ -82,7 +82,7 @@ def get_users_router( "/{id:uuid}", response_model=user_model, dependencies=[Depends(get_current_superuser)], - name="users:user" + name="users:user", ) async def get_user(user=Depends(get_user_or_404)): return user @@ -91,7 +91,7 @@ def get_users_router( "/{id:uuid}", response_model=user_model, dependencies=[Depends(get_current_superuser)], - name="users:user" + name="users:user", ) async def update_user( user_update: user_update_model, # type: ignore @@ -122,7 +122,7 @@ def get_users_router( status_code=status.HTTP_204_NO_CONTENT, response_class=Response, dependencies=[Depends(get_current_superuser)], - name="users:user" + name="users:user", ) async def delete_user( user=Depends(get_user_or_404), diff --git a/fastapi_users/router/verify.py b/fastapi_users/router/verify.py index e2107db3..5eebc53a 100644 --- a/fastapi_users/router/verify.py +++ b/fastapi_users/router/verify.py @@ -21,7 +21,11 @@ def get_verify_router( ): router = APIRouter() - @router.post("/request-verify-token", status_code=status.HTTP_202_ACCEPTED, name="verify:request-token") + @router.post( + "/request-verify-token", + status_code=status.HTTP_202_ACCEPTED, + name="verify:request-token", + ) async def request_verify_token( request: Request, email: EmailStr = Body(..., embed=True), diff --git a/setup.cfg b/setup.cfg index 87a4155a..bf925f6a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -11,7 +11,7 @@ replace = __version__ = "{new_version}" exclude = docs max-line-length = 88 docstring-convention = numpy -ignore = D1 +ignore = D1, W503 [isort] profile = black @@ -26,7 +26,7 @@ ignore_missing_imports = True [tool:pytest] addopts = --ignore=test_build.py -markers = +markers = authentication db fastapi_users diff --git a/tests/test_router_auth.py b/tests/test_router_auth.py index 73d39ce5..c3d22f26 100644 --- a/tests/test_router_auth.py +++ b/tests/test_router_auth.py @@ -157,17 +157,11 @@ class TestLogin: data = cast(Dict[str, Any], response.json()) assert data["detail"] == ErrorCode.LOGIN_BAD_CREDENTIALS - async def test_login_namespace( - self, - path, - app_factory - ): + async def test_login_namespace(self, path, app_factory): split_url = app_factory(True).url_path_for("auth:login").split("/") assert split_url[len(split_url) - 1] in path - - @pytest.mark.router @pytest.mark.parametrize("path", ["/mock/logout", "/mock-bis/logout"]) @pytest.mark.asyncio @@ -210,10 +204,6 @@ class TestLogout: ) assert response.status_code == status.HTTP_200_OK - async def test_logout_namespace( - self, - path, - app_factory - ): + async def test_logout_namespace(self, path, app_factory): split_url = app_factory(True).url_path_for("auth:logout").split("/") assert split_url[len(split_url) - 1] in path diff --git a/tests/test_router_register.py b/tests/test_router_register.py index 4bacfc1b..7cc0af4f 100644 --- a/tests/test_router_register.py +++ b/tests/test_router_register.py @@ -105,9 +105,7 @@ class TestRegister: @pytest.mark.asyncio -async def test_register_namespace( - get_user_manager -): +async def test_register_namespace(get_user_manager): app = FastAPI() app.include_router( get_register_router( diff --git a/tests/test_router_reset.py b/tests/test_router_reset.py index f6d063c1..2193f80f 100644 --- a/tests/test_router_reset.py +++ b/tests/test_router_reset.py @@ -151,22 +151,14 @@ class TestResetPassword: @pytest.mark.asyncio -async def test_forgot_password_namespace( - get_user_manager -): +async def test_forgot_password_namespace(get_user_manager): app = FastAPI() - app.include_router( - get_reset_password_router(get_user_manager) - ) + app.include_router(get_reset_password_router(get_user_manager)) assert app.url_path_for("reset:forgot_password") == "/forgot-password" @pytest.mark.asyncio -async def test_reset_password_namespace( - get_user_manager -): +async def test_reset_password_namespace(get_user_manager): app = FastAPI() - app.include_router( - get_reset_password_router(get_user_manager) - ) + app.include_router(get_reset_password_router(get_user_manager)) assert app.url_path_for("reset:reset_password") == "/reset-password" diff --git a/tests/test_router_users.py b/tests/test_router_users.py index 489bd9d4..ca40a7ed 100644 --- a/tests/test_router_users.py +++ b/tests/test_router_users.py @@ -98,10 +98,7 @@ class TestMe: assert data["id"] == str(verified_user.id) assert data["email"] == verified_user.email - async def test_current_user_namespace( - self, - app_factory - ): + async def test_current_user_namespace(self, app_factory): assert app_factory(True).url_path_for("users:current_user") == "/me" @@ -486,11 +483,7 @@ class TestGetUser: assert data["id"] == str(user.id) assert "hashed_password" not in data - async def test_get_user_namespace( - self, - app_factory, - user: UserDB - ): + async def test_get_user_namespace(self, app_factory, user: UserDB): assert app_factory(True).url_path_for("users:user", id=user.id) == f"/{user.id}"