Skip to content

Commit 2165bc4

Browse files
committed
Refactoring
1 parent 0ab31c1 commit 2165bc4

18 files changed

+98
-90
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,6 @@ venv.bak/
106106
dmypy.json
107107
.pyre/
108108
.pytype/
109-
cython_debug/
109+
cython_debug/
110+
.idea
111+
__pycache__

Makefile

+9-8
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@ help:
66
@echo "AVAILABLE COMMANDS"
77
@echo " run Start the app"
88
@echo " lint Reformat code"
9-
@echo " migrate Alembic migrate database"
10-
@echo " generate Alembic generate database"
9+
@echo " migrate Alembic migrate database"
10+
@echo " generate Alembic generate database"
1111

12-
.PHONY: ruff
13-
ruff:
14-
poetry run ruff check app/ --fix --respect-gitignore
12+
.PHONY: lint
13+
lint:
14+
poetry run ruff ./app --fix && poetry run black ./app
1515

1616
.PHONY: run
1717
run:
1818
poetry run python -m app
1919

20+
.PHONY: migrate
21+
migrate:
22+
poetry run alembic upgrade head
23+
2024
.PHONY: generate
2125
generate:
2226
poetry run alembic revision --autogenerate
2327

24-
.PHONY: migrate
25-
migrate:
26-
poetry run alembic upgrade head

app/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
Initial project v16
33
"""
44

5-
x = [1,2,3]
6-
a = 1+1
7-
b = 1 + 1
5+
x = [1, 2, 3]
6+
a = 1 + 1
7+
b = 1 + 1

app/api/depends.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ async def get_db() -> Database:
2020
await session.close()
2121

2222

23-
async def get_current_user(token: str = Depends(oauth2_scheme), db: Database = Depends(get_db)):
23+
async def get_current_user(
24+
token: str = Depends(oauth2_scheme), db: Database = Depends(get_db)
25+
):
2426
return await auth.authorization(token, db)

app/api/users/endpoints.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ async def new(user: UserSchemeAdd, db: Database = Depends(depends.get_db)):
4343

4444

4545
@router.post("/token", response_model=UserTokenScheme)
46-
async def token(form_data: auth.OAuth2PasswordRequestForm = Depends(), db: Database = Depends(depends.get_db)):
46+
async def token(
47+
form_data: auth.OAuth2PasswordRequestForm = Depends(),
48+
db: Database = Depends(depends.get_db),
49+
):
4750
"""
4851
Получение токена доступа для пользователя.
4952
"""

app/core/__init__.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
Ядро FastAPI приложения.
33
"""
44

5-
from .settings import settings
6-
7-
__all__ = (
8-
"settings",
9-
)
5+
from .settings import settings
6+
7+
__all__ = ("settings",)

app/core/auth/__init__.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from .security import verify_password, get_password_hash, create_access_token
77

88
__all__ = (
9-
'authorization',
10-
'OAuth2PasswordRequestForm',
11-
'verify_password',
12-
'get_password_hash',
13-
'create_access_token'
9+
"authorization",
10+
"OAuth2PasswordRequestForm",
11+
"verify_password",
12+
"get_password_hash",
13+
"create_access_token",
1414
)

app/core/auth/oauth2.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99

1010
class OAuth2PasswordRequestForm:
1111
def __init__(
12-
self,
13-
*,
14-
grant_type: Annotated[Union[str, None], Form(pattern="password")] = None,
15-
username: Annotated[str, Form()],
16-
password: Annotated[str, Form()],
17-
scope: Annotated[str, Form()] = "",
18-
client_id: Annotated[Union[str, None], Form()] = None,
19-
client_secret: Annotated[Union[str, None], Form()] = None,
12+
self,
13+
*,
14+
grant_type: Annotated[Union[str, None], Form(pattern="password")] = None,
15+
username: Annotated[str, Form()],
16+
password: Annotated[str, Form()],
17+
scope: Annotated[str, Form()] = "",
18+
client_id: Annotated[Union[str, None], Form()] = None,
19+
client_secret: Annotated[Union[str, None], Form()] = None,
2020
):
2121
"""
2222
Представляет форму запроса пароля OAuth 2.0.

app/core/auth/security.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ def create_access_token(username: str):
4545
Returns:
4646
str: Закодированный JWT токен в виде строки.
4747
"""
48-
data = dict(
49-
username=username,
50-
exp=datetime.utcnow() + timedelta(minutes=120)
51-
)
48+
data = dict(username=username, exp=datetime.utcnow() + timedelta(minutes=120))
5249
encoded_jwt = jwt.encode(data, settings.APP_AUTH_SECRET, algorithm="HS256")
5350
return encoded_jwt

app/core/settings.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ class Settings(BaseSettings):
1919

2020
@property
2121
def pg_dns(self):
22-
return (f"postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@",
23-
f"{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DATABASE}")
22+
return f"postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DATABASE}"
2423

2524

2625
settings = Settings()

app/database/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .models import Base
77

88
__all__ = (
9-
'Database',
10-
'engine',
11-
'Base',
9+
"Database",
10+
"engine",
11+
"Base",
1212
)

app/database/database.py

+27-27
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
from typing import Optional
22

3-
from sqlalchemy.engine.url import URL
4-
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession
5-
from sqlalchemy.ext.asyncio import create_async_engine as _create_async_engine
6-
7-
from app.core import settings
8-
from .repositories import UserRepo
9-
10-
11-
def create_async_engine(url: URL | str) -> AsyncEngine:
12-
return _create_async_engine(url=url, echo=False, pool_pre_ping=True)
13-
14-
15-
engine = create_async_engine(settings.pg_dns)
16-
17-
18-
class Database:
19-
session: AsyncSession
20-
21-
user: UserRepo
22-
23-
def __init__(
24-
self,
25-
session: AsyncSession,
26-
user: Optional[UserRepo] = None,
27-
):
28-
self.session = session
29-
self.user = user or UserRepo(session=session)
3+
from sqlalchemy.engine.url import URL
4+
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession
5+
from sqlalchemy.ext.asyncio import create_async_engine as _create_async_engine
6+
7+
from app.core import settings
8+
from .repositories import UserRepo
9+
10+
11+
def create_async_engine(url: URL | str) -> AsyncEngine:
12+
return _create_async_engine(url=url, echo=False, pool_pre_ping=True)
13+
14+
15+
engine = create_async_engine(settings.pg_dns)
16+
17+
18+
class Database:
19+
session: AsyncSession
20+
21+
user: UserRepo
22+
23+
def __init__(
24+
self,
25+
session: AsyncSession,
26+
user: Optional[UserRepo] = None,
27+
):
28+
self.session = session
29+
self.user = user or UserRepo(session=session)

app/database/models/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
from .user import User
77

88
__all__ = (
9-
'Base',
10-
'User',
9+
"Base",
10+
"User",
1111
)

app/database/models/base.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88

99
metadata = MetaData(
1010
naming_convention={
11-
'ix': 'ix_%(column_0_label)s',
12-
'uq': 'uq_%(table_name)s_%(column_0_name)s',
13-
'ck': 'ck_%(table_name)s_%(constraint_name)s',
14-
'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
15-
'pk': 'pk_%(table_name)s',
11+
"ix": "ix_%(column_0_label)s",
12+
"uq": "uq_%(table_name)s_%(column_0_name)s",
13+
"ck": "ck_%(table_name)s_%(constraint_name)s",
14+
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
15+
"pk": "pk_%(table_name)s",
1616
}
1717
)
1818

@@ -26,6 +26,4 @@ def __tablename__(cls):
2626

2727
__allow_unmapped__ = False
2828

29-
id: Mapped[int] = mapped_column(
30-
Integer, autoincrement=True, primary_key=True
31-
)
29+
id: Mapped[int] = mapped_column(Integer, autoincrement=True, primary_key=True)

app/database/repositories/__init__.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,4 @@
44

55
from .user import UserRepo
66

7-
__all__ = (
8-
'UserRepo',
9-
)
7+
__all__ = ("UserRepo",)

app/database/repositories/abstract.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from ..models import Base
1212

13-
AbstractModel = TypeVar('AbstractModel')
13+
AbstractModel = TypeVar("AbstractModel")
1414

1515

1616
class Repository(Generic[AbstractModel]):
@@ -29,7 +29,10 @@ async def get_by_where(self, whereclause) -> AbstractModel | None:
2929
return (await self.session.execute(statement)).unique().scalar_one_or_none()
3030

3131
async def get_many(
32-
self, whereclause: Optional [List[Any]] = None, limit: Optional[int] = None, order_by=None
32+
self,
33+
whereclause: Optional[List[Any]] = None,
34+
limit: Optional[int] = None,
35+
order_by=None,
3336
):
3437
statement = sa.select(self.type_model).limit(limit).order_by(order_by)
3538
if whereclause:
@@ -41,7 +44,11 @@ async def delete(self, whereclause) -> None:
4144
await self.session.execute(statement)
4245

4346
async def update(self, ident: int, **values):
44-
statement = sa.update(self.type_model).values(**values).where(self.type_model.id == ident)
47+
statement = (
48+
sa.update(self.type_model)
49+
.values(**values)
50+
.where(self.type_model.id == ident)
51+
)
4552
await self.session.execute(statement)
4653

4754
@abc.abstractmethod

app/database/repositories/user.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ async def new(
1616
self,
1717
username: str | None = None,
1818
password: str | None = None,
19-
) -> User:
20-
new_user = User()
21-
new_user.username = username
22-
new_user.password = password
23-
19+
) -> User:
20+
new_user = User()
21+
new_user.username = username
22+
new_user.password = password
23+
2424
new_user = await self.session.merge(new_user)
25-
await self.session.flush()
25+
await self.session.flush()
2626
return new_user
2727

2828
async def get_by_username(self, username: str) -> User | None:

app/schemas/users.py

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class UserScheme(BaseModel):
99
"""
1010
Схема, которую возвращает бэк.
1111
"""
12+
1213
id: int = 0
1314
username: str = "username"
1415

@@ -20,6 +21,7 @@ class UserSchemeAdd(BaseModel):
2021
"""
2122
Схема создания пользователя.
2223
"""
24+
2325
username: str = "username"
2426
password: str = "password"
2527

@@ -28,6 +30,7 @@ class UserTokenScheme(BaseModel):
2830
"""
2931
Схема токена пользователя.
3032
"""
33+
3134
access_token: str
3235
token_type: str = "Bearer"
3336

0 commit comments

Comments
 (0)