big fix imports
This commit is contained in:
0
__init__.py
Normal file
0
__init__.py
Normal file
@@ -30,3 +30,64 @@ dependencies = [
|
|||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
||||||
|
[tool.ruff]
|
||||||
|
# Exclude commonly ignored directories and files.
|
||||||
|
exclude = [
|
||||||
|
".bzr",
|
||||||
|
".direnv",
|
||||||
|
".eggs",
|
||||||
|
".git",
|
||||||
|
".git-rewrite",
|
||||||
|
".hg",
|
||||||
|
".ipynb_checkpoints",
|
||||||
|
".mypy_cache",
|
||||||
|
".nox",
|
||||||
|
".pants.d",
|
||||||
|
".pyenv",
|
||||||
|
".pytest_cache",
|
||||||
|
".pytype",
|
||||||
|
".ruff_cache",
|
||||||
|
".svn",
|
||||||
|
".tox",
|
||||||
|
".venv",
|
||||||
|
".vscode",
|
||||||
|
"__pypackages__",
|
||||||
|
"_build",
|
||||||
|
"buck-out",
|
||||||
|
"build",
|
||||||
|
"dist",
|
||||||
|
"node_modules",
|
||||||
|
"site-packages",
|
||||||
|
"venv",
|
||||||
|
]
|
||||||
|
# Set the maximum line length for both linting and formatting.
|
||||||
|
line-length = 88
|
||||||
|
# Assume Python 3.9 for compatibility checks.
|
||||||
|
target-version = "py39"
|
||||||
|
# Enable preview features for early access to new rules and formatting changes.
|
||||||
|
preview = true
|
||||||
|
|
||||||
|
[tool.ruff.lint]
|
||||||
|
# Select specific rule groups to enable.
|
||||||
|
# 'E' for pycodestyle, 'F' for Pyflakes, 'I' for isort, 'B' for flake8-bugbear.
|
||||||
|
select = [
|
||||||
|
"E",
|
||||||
|
"F",
|
||||||
|
"I",
|
||||||
|
"B",
|
||||||
|
"UP", # pyupgrade
|
||||||
|
"SIM", # flake8-simplify
|
||||||
|
]
|
||||||
|
# Ignore specific rules within the selected groups.
|
||||||
|
ignore = [
|
||||||
|
"UP035",
|
||||||
|
"B903",
|
||||||
|
"B904",
|
||||||
|
"E501",
|
||||||
|
"B008",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.ruff.format]
|
||||||
|
# Enable Ruff's formatter.
|
||||||
|
docstring-code-format = true
|
||||||
0
src/__init__.py
Normal file
0
src/__init__.py
Normal file
@@ -1,14 +1,14 @@
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from fastapi import HTTPException, Depends, Path
|
from fastapi import Depends, HTTPException, Path
|
||||||
from fastapi.security import OAuth2PasswordBearer
|
from fastapi.security import OAuth2PasswordBearer
|
||||||
from jwt import InvalidTokenError
|
from jwt import InvalidTokenError
|
||||||
|
|
||||||
|
from src.api.dependacies.db_dep import sessionDep
|
||||||
from src.core.auth_manager import AuthManager
|
from src.core.auth_manager import AuthManager
|
||||||
from src.core.settings import settings
|
from src.core.settings import settings
|
||||||
from src.schemas.auth import TokenData
|
from src.schemas.auth import TokenData
|
||||||
from src.services.users import UserService
|
from src.services.users import UserService
|
||||||
from src.api.dependacies.db_dep import sessionDep
|
|
||||||
|
|
||||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"{settings.api.v1_login_url}/login")
|
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"{settings.api.v1_login_url}/login")
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from src.api.v1.auth import router as auth_router
|
from src.api.v1.auth import router as auth_router
|
||||||
from src.api.v1.users import router as users_router
|
|
||||||
from src.api.v1.tasks import router as tasks_router
|
from src.api.v1.tasks import router as tasks_router
|
||||||
|
from src.api.v1.users import router as users_router
|
||||||
from src.core.settings import settings
|
from src.core.settings import settings
|
||||||
|
|
||||||
router = APIRouter(prefix=settings.api.v1.prefix)
|
router = APIRouter(prefix=settings.api.v1.prefix)
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ from fastapi import APIRouter, Depends
|
|||||||
from fastapi.security import OAuth2PasswordRequestForm
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
|
|
||||||
from src.api.dependacies.db_dep import sessionDep
|
from src.api.dependacies.db_dep import sessionDep
|
||||||
from src.schemas.users import UserRequestADD
|
|
||||||
from src.core.settings import settings
|
from src.core.settings import settings
|
||||||
|
from src.schemas.users import UserRequestADD
|
||||||
from src.services.auth import AuthService
|
from src.services.auth import AuthService
|
||||||
|
|
||||||
router = APIRouter(prefix=settings.api.v1.auth, tags=["Auth"])
|
router = APIRouter(prefix=settings.api.v1.auth, tags=["Auth"])
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ router = APIRouter(prefix="/tasks", tags=["Tasks"])
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/")
|
@router.get("/")
|
||||||
async def get_tasks(db:sessionDep,user: ActiveUser):
|
async def get_tasks(db: sessionDep, user: ActiveUser):
|
||||||
query = select(TasksORM.id, TasksORM.description).where(TasksORM.user_id == user.id)
|
query = select(TasksORM.id, TasksORM.description).where(TasksORM.user_id == user.id)
|
||||||
tasks = await db.session.execute(query)
|
tasks = await db.session.execute(query)
|
||||||
result = tasks.scalars().all()
|
result = tasks.scalars().all()
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
from fastapi import APIRouter
|
from fastapi import APIRouter, Body
|
||||||
from fastapi import Body
|
|
||||||
|
|
||||||
from src.schemas.users import UserUpdate
|
|
||||||
from src.api.dependacies.user_dep import ActiveUser, AdminUser, CurrentOrAdmin
|
|
||||||
from src.api.dependacies.db_dep import sessionDep
|
from src.api.dependacies.db_dep import sessionDep
|
||||||
|
from src.api.dependacies.user_dep import ActiveUser, AdminUser, CurrentOrAdmin
|
||||||
from src.core.settings import settings
|
from src.core.settings import settings
|
||||||
|
from src.schemas.users import UserUpdate
|
||||||
from src.services.users import UserService
|
from src.services.users import UserService
|
||||||
|
|
||||||
router = APIRouter(prefix=settings.api.v1.users, tags=["Users"])
|
router = APIRouter(prefix=settings.api.v1.users, tags=["Users"])
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from datetime import timedelta, datetime, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
|
|
||||||
import jwt
|
import jwt
|
||||||
from passlib.context import CryptContext
|
from passlib.context import CryptContext
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from sqlalchemy import TIMESTAMP, func, event
|
from sqlalchemy import TIMESTAMP, event, func
|
||||||
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
|
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine
|
||||||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||||||
|
|
||||||
from src.core.settings import settings
|
from src.core.settings import settings
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class AccessToken(BaseSettings):
|
|||||||
expire_minutes: int = 15
|
expire_minutes: int = 15
|
||||||
secret_key: str
|
secret_key: str
|
||||||
algorithm: str = "HS256"
|
algorithm: str = "HS256"
|
||||||
|
token_type: str = "bearer" # noqa: S105
|
||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import sys
|
import sys
|
||||||
import uvicorn
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from fastapi import FastAPI
|
|
||||||
|
|
||||||
|
import uvicorn
|
||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
sys.path.append(str(Path(__file__).parent.parent))
|
sys.path.append(str(Path(__file__).parent.parent))
|
||||||
from src.api import router
|
from src.api import router
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
from logging.config import fileConfig
|
from logging.config import fileConfig
|
||||||
|
|
||||||
from sqlalchemy import engine_from_config, event
|
|
||||||
from sqlalchemy import pool
|
|
||||||
from alembic import context
|
from alembic import context
|
||||||
|
from sqlalchemy import engine_from_config, event, pool
|
||||||
|
|
||||||
from src.core.database import Base
|
from src.core.database import Base
|
||||||
from src.models import * # noqa
|
from src.models import * # noqa
|
||||||
|
|||||||
@@ -8,9 +8,8 @@ Create Date: 2025-07-06 00:02:09.254907
|
|||||||
|
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = "a2fdd0ec4a96"
|
revision: str = "a2fdd0ec4a96"
|
||||||
|
|||||||
@@ -8,9 +8,8 @@ Create Date: 2025-08-06 23:41:56.778423
|
|||||||
|
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = "197b195208e8"
|
revision: str = "197b195208e8"
|
||||||
@@ -36,9 +35,9 @@ def upgrade():
|
|||||||
break
|
break
|
||||||
|
|
||||||
if constraint_name:
|
if constraint_name:
|
||||||
try:
|
try: # noqa: SIM105
|
||||||
batch_op.drop_constraint(constraint_name, type_="foreignkey")
|
batch_op.drop_constraint(constraint_name, type_="foreignkey")
|
||||||
except: # noqa E722
|
except: # noqa E722
|
||||||
pass
|
pass
|
||||||
|
|
||||||
batch_op.create_foreign_key(
|
batch_op.create_foreign_key(
|
||||||
@@ -49,9 +48,9 @@ def upgrade():
|
|||||||
def downgrade():
|
def downgrade():
|
||||||
"""Downgrade schema."""
|
"""Downgrade schema."""
|
||||||
with op.batch_alter_table("tasks", schema=None) as batch_op:
|
with op.batch_alter_table("tasks", schema=None) as batch_op:
|
||||||
try:
|
try: # noqa: SIM105
|
||||||
batch_op.drop_constraint("fk_tasks_user_id_users", type_="foreignkey")
|
batch_op.drop_constraint("fk_tasks_user_id_users", type_="foreignkey")
|
||||||
except: # noqa E722
|
except: # noqa E722
|
||||||
pass
|
pass
|
||||||
|
|
||||||
batch_op.create_foreign_key(
|
batch_op.create_foreign_key(
|
||||||
|
|||||||
@@ -6,11 +6,10 @@ Create Date: 2025-08-06 23:54:24.308488
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union # noqa: UP035
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = "4b0f3ea2fd26"
|
revision: str = "4b0f3ea2fd26"
|
||||||
@@ -31,9 +30,9 @@ def upgrade():
|
|||||||
|
|
||||||
for fk in foreign_keys:
|
for fk in foreign_keys:
|
||||||
if "user_id" in fk["constrained_columns"]:
|
if "user_id" in fk["constrained_columns"]:
|
||||||
try:
|
try: # noqa: SIM105
|
||||||
batch_op.drop_constraint(fk["name"], type_="foreignkey")
|
batch_op.drop_constraint(fk["name"], type_="foreignkey")
|
||||||
except: # noqa E722
|
except: # noqa E722
|
||||||
pass
|
pass
|
||||||
|
|
||||||
batch_op.create_foreign_key(
|
batch_op.create_foreign_key(
|
||||||
@@ -44,9 +43,9 @@ def upgrade():
|
|||||||
def downgrade():
|
def downgrade():
|
||||||
"""Downgrade schema."""
|
"""Downgrade schema."""
|
||||||
with op.batch_alter_table("tasks", schema=None) as batch_op:
|
with op.batch_alter_table("tasks", schema=None) as batch_op:
|
||||||
try:
|
try: # noqa: SIM105
|
||||||
batch_op.drop_constraint("fk_tasks_user_id_users", type_="foreignkey")
|
batch_op.drop_constraint("fk_tasks_user_id_users", type_="foreignkey")
|
||||||
except: # noqa E722
|
except: # noqa E722
|
||||||
pass
|
pass
|
||||||
batch_op.create_foreign_key(
|
batch_op.create_foreign_key(
|
||||||
"fk_tasks_user_id_users", "users", ["user_id"], ["id"]
|
"fk_tasks_user_id_users", "users", ["user_id"], ["id"]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from src.models.users import UsersORM
|
|
||||||
from src.models.tasks import TasksORM
|
from src.models.tasks import TasksORM
|
||||||
|
from src.models.users import UsersORM
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"UsersORM",
|
"UsersORM",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from typing import Optional, TYPE_CHECKING
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
from sqlalchemy import ForeignKey, Text, Date, Enum, String
|
from sqlalchemy import Date, Enum, ForeignKey, String, Text
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from src.core.database import Base
|
from src.core.database import Base
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Optional, TYPE_CHECKING
|
from typing import TYPE_CHECKING, Optional
|
||||||
|
|
||||||
from sqlalchemy import String, BigInteger, Integer, Boolean
|
from sqlalchemy import BigInteger, Boolean, Integer, String
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from src.core.database import Base
|
from src.core.database import Base
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from src.repository.base import BaseRepo
|
|
||||||
from src.models.tasks import TasksORM
|
from src.models.tasks import TasksORM
|
||||||
|
from src.repository.base import BaseRepo
|
||||||
|
|
||||||
|
|
||||||
class TasksRepo(BaseRepo):
|
class TasksRepo(BaseRepo):
|
||||||
model = TasksORM
|
model = TasksORM
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from pydantic import BaseModel, EmailStr, ConfigDict, BeforeValidator
|
from pydantic import BaseModel, BeforeValidator, ConfigDict, EmailStr
|
||||||
|
|
||||||
from src.schemas.validators import ensure_password
|
from src.schemas.validators import ensure_password
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
|
|
||||||
from src.schemas.auth import Token
|
|
||||||
from src.schemas.users import UserRequestADD, User, UserAdd, UserWithHashedPass
|
|
||||||
from src.services.base import BaseService
|
|
||||||
from src.core.auth_manager import AuthManager
|
from src.core.auth_manager import AuthManager
|
||||||
|
from src.core.settings import settings
|
||||||
|
from src.schemas.auth import Token
|
||||||
|
from src.schemas.users import User, UserAdd, UserRequestADD, UserWithHashedPass
|
||||||
|
from src.services.base import BaseService
|
||||||
|
|
||||||
|
|
||||||
class AuthService(BaseService):
|
class AuthService(BaseService):
|
||||||
@@ -37,4 +38,6 @@ class AuthService(BaseService):
|
|||||||
access_token = AuthManager.create_access_token(
|
access_token = AuthManager.create_access_token(
|
||||||
data={"id": user.id, "sub": user.username, "is_active": user.is_active}
|
data={"id": user.id, "sub": user.username, "is_active": user.is_active}
|
||||||
)
|
)
|
||||||
return Token(access_token=access_token, token_type="bearer")
|
return Token(
|
||||||
|
access_token=access_token, token_type=settings.access_token.token_type
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from services.base import BaseService
|
from src.services.base import BaseService
|
||||||
|
|
||||||
|
|
||||||
class TasksService(BaseService): ...
|
class TasksService(BaseService): ...
|
||||||
|
|||||||
Reference in New Issue
Block a user