Skip to content

Commit 96f2bf3

Browse files
committed
Fixed wps errors
1 parent 41178e5 commit 96f2bf3

File tree

17 files changed

+205
-105
lines changed

17 files changed

+205
-105
lines changed

backend/app/api/deps.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
from sqlmodel import Session
1212

1313
from app import constants
14-
from app.core import security
15-
from app.core import config, db
14+
from app.core import config, db, security
1615
from app.models import TokenPayload, User
1716

1817
reusable_oauth2 = OAuth2PasswordBearer(
19-
tokenUrl=f"{config.settings.API_V1_STR}/login/access-token",
18+
tokenUrl=f"{config.settings.API_V1_STR}/login/access-token", # noqa: WPS237
2019
)
2120

2221

@@ -57,9 +56,15 @@ def get_current_user(session: SessionDep, token: TokenDep) -> User:
5756
token_data = _validate_token(token)
5857
user = session.get(User, token_data.sub)
5958
if not user:
60-
raise HTTPException(status_code=constants.NOT_FOUND_CODE, detail="User not found")
59+
raise HTTPException(
60+
status_code=constants.NOT_FOUND_CODE,
61+
detail="User not found",
62+
)
6163
if not user.is_active:
62-
raise HTTPException(status_code=constants.BAD_REQUEST_CODE, detail="Inactive user")
64+
raise HTTPException(
65+
status_code=constants.BAD_REQUEST_CODE,
66+
detail="Inactive user",
67+
)
6368
return user
6469

6570

backend/app/api/routes/items.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ def read_item(
5353
if not db_item:
5454
raise HTTPException(status_code=NOT_FOUND_CODE, detail="Item not found")
5555
if not current_user.is_superuser and (db_item.owner_id != current_user.id):
56-
raise HTTPException(status_code=BAD_REQUEST_CODE, detail="Not enough permissions")
56+
raise HTTPException(
57+
status_code=BAD_REQUEST_CODE, detail="Not enough permissions",
58+
)
5759
return ItemPublic.model_validate(db_item)
5860

5961

@@ -85,7 +87,9 @@ def update_item(
8587
if not db_item:
8688
raise HTTPException(status_code=NOT_FOUND_CODE, detail="Item not found")
8789
if not current_user.is_superuser and (db_item.owner_id != current_user.id):
88-
raise HTTPException(status_code=BAD_REQUEST_CODE, detail="Not enough permissions")
90+
raise HTTPException(
91+
status_code=BAD_REQUEST_CODE, detail="Not enough permissions",
92+
)
8993
update_dict = item_in.model_dump(exclude_unset=True)
9094
db_item.sqlmodel_update(update_dict)
9195
session.add(db_item)
@@ -105,7 +109,9 @@ def delete_item(
105109
if not db_item:
106110
raise HTTPException(status_code=NOT_FOUND_CODE, detail="Item not found")
107111
if not current_user.is_superuser and (db_item.owner_id != current_user.id):
108-
raise HTTPException(status_code=BAD_REQUEST_CODE, detail="Not enough permissions")
112+
raise HTTPException(
113+
status_code=BAD_REQUEST_CODE, detail="Not enough permissions",
114+
)
109115
session.delete(db_item)
110116
session.commit()
111117
return Message(message="Item deleted successfully")

backend/app/api/routes/login.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
from app.constants import BAD_REQUEST_CODE, NOT_FOUND_CODE
1313
from app.core import security
1414
from app.core.config import settings
15-
from app.models import Message, NewPassword, Token, UserPublic
1615
from app.email_utils import (
1716
generate_password_reset_token,
1817
generate_reset_password_email,
1918
send_email,
2019
verify_password_reset_token,
2120
)
21+
from app.models import Message, NewPassword, Token, UserPublic
2222

2323
router = APIRouter(tags=["login"])
2424

@@ -35,7 +35,9 @@ def login_access_token(
3535
password=form_data.password,
3636
)
3737
if not user:
38-
raise HTTPException(status_code=BAD_REQUEST_CODE, detail="Incorrect email or password")
38+
raise HTTPException(
39+
status_code=BAD_REQUEST_CODE, detail="Incorrect email or password",
40+
)
3941
if not user.is_active:
4042
raise HTTPException(status_code=BAD_REQUEST_CODE, detail="Inactive user")
4143
access_token_expires = timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)

backend/app/api/routes/misc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
from app.api.deps import get_current_active_superuser
77
from app.constants import CREATED_CODE
8-
from app.models import Message
98
from app.email_utils import generate_test_email, send_email
9+
from app.models import Message
1010

1111
router = APIRouter(prefix="/utils", tags=["utils"])
1212

backend/app/api/routes/users.py

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@
22

33
import uuid
44

5-
# Removed unused Any import
65
from fastapi import APIRouter, Depends, HTTPException
76
from sqlmodel import col, delete, func, select
87

9-
from app import crud
8+
from app import crud, models
109
from app.api.deps import (
11-
Currentmodels.User,
1210
SessionDep,
1311
get_current_active_superuser,
1412
)
15-
from app.constants import BAD_REQUEST_CODE, CONFLICT_CODE, FORBIDDEN_CODE, NOT_FOUND_CODE
13+
from app.constants import (
14+
BAD_REQUEST_CODE,
15+
CONFLICT_CODE,
16+
FORBIDDEN_CODE,
17+
NOT_FOUND_CODE,
18+
)
1619
from app.core.config import settings
1720
from app.core.security import get_password_hash, verify_password
18-
from app import models
1921
from app.email_utils import generate_new_account_email, send_email
2022

2123
router = APIRouter(prefix="/users", tags=["users"])
@@ -25,22 +27,30 @@
2527
"/",
2628
dependencies=[Depends(get_current_active_superuser)],
2729
)
28-
def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> models.models.UsersPublic:
30+
def read_users(
31+
session: SessionDep,
32+
skip: int = 0,
33+
limit: int = 100,
34+
) -> models.UsersPublic:
2935
"""Retrieve users."""
3036
count_statement = select(func.count()).select_from(models.User)
3137
count = session.exec(count_statement).one()
3238

3339
statement = select(models.User).offset(skip).limit(limit)
3440
users = session.exec(statement).all()
3541

36-
return models.models.UsersPublic(data=users, count=count)
42+
return models.UsersPublic(user_data=users, count=count)
3743

3844

3945
@router.post(
4046
"/",
4147
dependencies=[Depends(get_current_active_superuser)],
4248
)
43-
def create_user(*, session: SessionDep, user_in: models.models.UserCreate) -> models.models.UserPublic:
49+
def create_user(
50+
*,
51+
session: SessionDep,
52+
user_in: models.UserCreate,
53+
) -> models.UserPublic:
4454
"""Create new user."""
4555
user = crud.get_user_by_email(session=session, email=user_in.email)
4656
if user:
@@ -50,7 +60,7 @@ def create_user(*, session: SessionDep, user_in: models.models.UserCreate) -> mo
5060
)
5161

5262
user = crud.create_user(session=session, user_create=user_in)
53-
if settings.emails_enabled and user_in.email:
63+
if not settings.emails_enabled and user_in.email:
5464
email_data = generate_new_account_email(
5565
email_to=user_in.email,
5666
username=user_in.email,
@@ -61,16 +71,16 @@ def create_user(*, session: SessionDep, user_in: models.models.UserCreate) -> mo
6171
subject=email_data.subject,
6272
html_content=email_data.html_content,
6373
)
64-
return models.models.UserPublic.model_validate(user)
74+
return models.UserPublic.model_validate(user)
6575

6676

6777
@router.patch("/me")
6878
def update_user_me(
6979
*,
7080
session: SessionDep,
71-
user_in: models.models.models.UserUpdateMe,
72-
current_user: Currentmodels.User,
73-
) -> models.models.UserPublic:
81+
user_in: models.UserUpdateMe,
82+
current_user: models.User,
83+
) -> models.UserPublic:
7484
"""Update own user."""
7585
if user_in.email:
7686
existing_user = crud.get_user_by_email(session=session, email=user_in.email)
@@ -84,15 +94,15 @@ def update_user_me(
8494
session.add(current_user)
8595
session.commit()
8696
session.refresh(current_user)
87-
return models.models.UserPublic.model_validate(current_user)
97+
return models.UserPublic.model_validate(current_user)
8898

8999

90100
@router.patch("/me/password")
91101
def update_password_me(
92102
*,
93103
session: SessionDep,
94104
body: models.UpdatePassword,
95-
current_user: Currentmodels.User,
105+
current_user: models.User,
96106
) -> models.Message:
97107
"""Update own password."""
98108
if not verify_password(body.current_password, current_user.hashed_password):
@@ -110,13 +120,16 @@ def update_password_me(
110120

111121

112122
@router.get("/me")
113-
def read_user_me(current_user: Currentmodels.User) -> models.models.UserPublic:
123+
def read_user_me(current_user: models.User) -> models.UserPublic:
114124
"""Get current user."""
115-
return models.models.UserPublic.model_validate(current_user)
125+
return models.UserPublic.model_validate(current_user)
116126

117127

118128
@router.delete("/me")
119-
def delete_user_me(session: SessionDep, current_user: Currentmodels.User) -> models.Message:
129+
def delete_user_me(
130+
session: SessionDep,
131+
current_user: models.User,
132+
) -> models.Message:
120133
"""Delete own user."""
121134
if current_user.is_superuser:
122135
raise HTTPException(
@@ -129,37 +142,40 @@ def delete_user_me(session: SessionDep, current_user: Currentmodels.User) -> mod
129142

130143

131144
@router.post("/signup")
132-
def register_user(session: SessionDep, user_in: models.models.UserRegister) -> models.models.UserPublic:
145+
def register_user(
146+
session: SessionDep,
147+
user_in: models.UserRegister,
148+
) -> models.UserPublic:
133149
"""Create new user without the need to be logged in."""
134150
user = crud.get_user_by_email(session=session, email=user_in.email)
135151
if user:
136152
raise HTTPException(
137153
status_code=BAD_REQUEST_CODE,
138154
detail="The user with this email already exists in the system",
139155
)
140-
user_create = models.models.UserCreate.model_validate(user_in)
156+
user_create = models.UserCreate.model_validate(user_in)
141157
user = crud.create_user(session=session, user_create=user_create)
142-
return models.models.UserPublic.model_validate(user)
158+
return models.UserPublic.model_validate(user)
143159

144160

145161
@router.get("/{user_id}")
146162
def read_user_by_id(
147163
user_id: uuid.UUID,
148164
session: SessionDep,
149-
current_user: Currentmodels.User,
150-
) -> models.models.UserPublic:
165+
current_user: models.User,
166+
) -> models.UserPublic:
151167
"""Get a specific user by id."""
152168
user = session.get(models.User, user_id)
153169
if not user:
154170
raise HTTPException(status_code=NOT_FOUND_CODE, detail="models.User not found")
155171
if user == current_user:
156-
return models.models.UserPublic.model_validate(user)
172+
return models.UserPublic.model_validate(user)
157173
if not current_user.is_superuser:
158174
raise HTTPException(
159175
status_code=FORBIDDEN_CODE,
160176
detail="The user doesn't have enough privileges",
161177
)
162-
return models.models.UserPublic.model_validate(user)
178+
return models.UserPublic.model_validate(user)
163179

164180

165181
@router.patch(
@@ -170,8 +186,8 @@ def update_user(
170186
*,
171187
session: SessionDep,
172188
user_id: uuid.UUID,
173-
user_in: models.models.UserUpdate,
174-
) -> models.models.UserPublic:
189+
user_in: models.UserUpdate,
190+
) -> models.UserPublic:
175191
"""Update a user."""
176192
db_user = session.get(models.User, user_id)
177193
if not db_user:
@@ -188,13 +204,13 @@ def update_user(
188204
)
189205

190206
db_user = crud.update_user(session=session, db_user=db_user, user_in=user_in)
191-
return models.models.UserPublic.model_validate(db_user)
207+
return models.UserPublic.model_validate(db_user)
192208

193209

194210
@router.delete("/{user_id}", dependencies=[Depends(get_current_active_superuser)])
195211
def delete_user(
196212
session: SessionDep,
197-
current_user: Currentmodels.User,
213+
current_user: models.User,
198214
user_id: uuid.UUID,
199215
) -> models.Message:
200216
"""Delete a user."""
@@ -206,7 +222,7 @@ def delete_user(
206222
status_code=FORBIDDEN_CODE,
207223
detail="Super users are not allowed to delete themselves",
208224
)
209-
statement = delete(models.Item).where(col(models.Item.owner_id) == user_id)
225+
statement = delete(models.Item).where(col(models.Item.owner_id) == user_id) # noqa: WPS221
210226
session.execute(statement) # type: ignore[deprecated]
211227
session.delete(user)
212228
session.commit()

backend/app/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@
2424
MIN_VARIABLE_NAME_LENGTH = 2
2525
MAX_JONES_COMPLEXITY = 14
2626
MAX_STRING_LITERAL_USAGE = 3
27-
MAX_EXPRESSION_USAGE = 7
27+
MAX_EXPRESSION_USAGE = 7

backend/app/core/config.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,13 @@ class Settings(BaseSettings): # type: ignore[explicit-any]
3737
env_ignore_empty=True,
3838
extra="ignore",
3939
)
40-
40+
4141
# API Settings
4242
API_V1_STR: str = "/api/v1"
4343
SECRET_KEY: str = secrets.token_urlsafe(TOKEN_LENGTH)
44-
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 # 60 minutes * 24 hours * 8 days = 8 days
44+
ACCESS_TOKEN_EXPIRE_MINUTES: int = (
45+
60 * 24 * 8
46+
) # 60 minutes * 24 hours * 8 days = 8 days
4547
FRONTEND_HOST: str = "http://localhost:5173"
4648
ENVIRONMENT: Literal["local", "staging", "production"] = "local"
4749

@@ -54,14 +56,14 @@ class Settings(BaseSettings): # type: ignore[explicit-any]
5456
# Project Settings
5557
PROJECT_NAME: str
5658
SENTRY_DSN: HttpUrl | None = None
57-
59+
5860
# Database Settings
5961
POSTGRES_SERVER: str
6062
POSTGRES_PORT: int = 5432
6163
POSTGRES_USER: str
6264
POSTGRES_PASSWORD: str = ""
6365
POSTGRES_DB: str = ""
64-
66+
6567
# Email Settings
6668
SMTP_TLS: bool = True
6769
SMTP_SSL: bool = False
@@ -72,22 +74,22 @@ class Settings(BaseSettings): # type: ignore[explicit-any]
7274
EMAILS_FROM_EMAIL: EmailStr | None = None
7375
EMAILS_FROM_NAME: EmailStr | None = None
7476
EMAIL_RESET_TOKEN_EXPIRE_HOURS: int = 48
75-
77+
7678
# Test Settings
7779
EMAIL_TEST_USER: EmailStr = "[email protected]"
7880
FIRST_SUPERUSER: EmailStr
7981
FIRST_SUPERUSER_PASSWORD: str
8082

8183
@property
82-
@computed_field # type: ignore[prop-decorator]
84+
@computed_field
8385
def all_cors_origins(self) -> list[str]:
8486
"""Get all CORS origins."""
8587
return [str(origin).rstrip("/") for origin in self.BACKEND_CORS_ORIGINS] + [
8688
self.FRONTEND_HOST,
8789
]
8890

8991
@property
90-
@computed_field # type: ignore[prop-decorator]
92+
@computed_field
9193
def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn: # noqa: N802
9294
"""Build database URI from configuration."""
9395
return PostgresDsn.build(
@@ -100,13 +102,13 @@ def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn: # noqa: N802
100102
)
101103

102104
@property
103-
@computed_field # type: ignore[prop-decorator]
105+
@computed_field
104106
def emails_enabled(self) -> bool:
105107
"""Check if email configuration is enabled."""
106108
return bool(self.SMTP_HOST and self.EMAILS_FROM_EMAIL)
107109

108110
def _check_default_secret(self, var_name: str, secret_value: str | None) -> None:
109-
if secret_value == "changethis":
111+
if secret_value == "changethis": # noqa: S105
110112
message = (
111113
f'The value of {var_name} is "changethis", '
112114
"for security, please change it, at least for deployments."

0 commit comments

Comments
 (0)