Remove and reorder unused imports across the project for cleaner and more consistent code structure
This commit is contained in:
@@ -14,7 +14,6 @@ sys.path.append(str(app_dir.parent))
|
|||||||
|
|
||||||
# Import Core modules
|
# Import Core modules
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
from app.core.database import Base
|
|
||||||
|
|
||||||
# Import all models to ensure they're registered with SQLAlchemy
|
# Import all models to ensure they're registered with SQLAlchemy
|
||||||
from app.models import *
|
from app.models import *
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-10-30 16:40:21.000021
|
|||||||
"""
|
"""
|
||||||
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 = '2d0fcec3b06d'
|
revision: str = '2d0fcec3b06d'
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-02-28 09:19:33.212278
|
|||||||
"""
|
"""
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy.dialects import postgresql
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = '38bf9e7e74b3'
|
revision: str = '38bf9e7e74b3'
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-10-31 07:41:18.729544
|
|||||||
"""
|
"""
|
||||||
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 = '549b50ea888d'
|
revision: str = '549b50ea888d'
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ Create Date: 2025-02-27 12:47:46.445313
|
|||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from alembic import op
|
from alembic import op
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = '7396957cbe80'
|
revision: str = '7396957cbe80'
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-10-30 10:00:00.000000
|
|||||||
"""
|
"""
|
||||||
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 = '9e4f2a1b8c7d'
|
revision: str = '9e4f2a1b8c7d'
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-10-30 16:41:33.273135
|
|||||||
"""
|
"""
|
||||||
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 = 'b76c725fc3cf'
|
revision: str = 'b76c725fc3cf'
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Create Date: 2025-10-31 12:08:05.141353
|
|||||||
"""
|
"""
|
||||||
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 = 'fbf6318a8a36'
|
revision: str = 'fbf6318a8a36'
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ from typing import Optional
|
|||||||
from fastapi import Depends, HTTPException, status, Header
|
from fastapi import Depends, HTTPException, status, Header
|
||||||
from fastapi.security import OAuth2PasswordBearer
|
from fastapi.security import OAuth2PasswordBearer
|
||||||
from fastapi.security.utils import get_authorization_scheme_param
|
from fastapi.security.utils import get_authorization_scheme_param
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.core.auth import get_token_data, TokenExpiredError, TokenInvalidError
|
from app.core.auth import get_token_data, TokenExpiredError, TokenInvalidError
|
||||||
from app.core.database_async import get_async_db
|
from app.core.database_async import get_async_db
|
||||||
|
|||||||
@@ -9,14 +9,15 @@ These dependencies are optional and flexible:
|
|||||||
"""
|
"""
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import Depends, HTTPException, status
|
from fastapi import Depends, HTTPException, status
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
from app.api.dependencies.auth import get_current_user
|
||||||
from app.core.database_async import get_async_db
|
from app.core.database_async import get_async_db
|
||||||
|
from app.crud.organization_async import organization_async as organization_crud
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.models.user_organization import OrganizationRole
|
from app.models.user_organization import OrganizationRole
|
||||||
from app.api.dependencies.auth import get_current_user
|
|
||||||
from app.crud.organization_async import organization_async as organization_crud
|
|
||||||
|
|
||||||
|
|
||||||
def require_superuser(
|
def require_superuser(
|
||||||
|
|||||||
@@ -6,27 +6,21 @@ These endpoints require superuser privileges and provide CMS-like functionality
|
|||||||
for managing the application.
|
for managing the application.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
from enum import Enum
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from enum import Enum
|
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Query, Body, status
|
from fastapi import APIRouter, Depends, Query, status
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.api.dependencies.permissions import require_superuser
|
from app.api.dependencies.permissions import require_superuser
|
||||||
from app.core.database_async import get_async_db
|
from app.core.database_async import get_async_db
|
||||||
from app.crud.user_async import user_async as user_crud
|
from app.core.exceptions import NotFoundError, DuplicateError, AuthorizationError, ErrorCode
|
||||||
from app.crud.organization_async import organization_async as organization_crud
|
from app.crud.organization_async import organization_async as organization_crud
|
||||||
|
from app.crud.user_async import user_async as user_crud
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.models.user_organization import OrganizationRole
|
from app.models.user_organization import OrganizationRole
|
||||||
from app.schemas.users import UserResponse, UserCreate, UserUpdate
|
|
||||||
from app.schemas.organizations import (
|
|
||||||
OrganizationResponse,
|
|
||||||
OrganizationCreate,
|
|
||||||
OrganizationUpdate,
|
|
||||||
OrganizationMemberResponse
|
|
||||||
)
|
|
||||||
from app.schemas.common import (
|
from app.schemas.common import (
|
||||||
PaginationParams,
|
PaginationParams,
|
||||||
PaginatedResponse,
|
PaginatedResponse,
|
||||||
@@ -34,7 +28,13 @@ from app.schemas.common import (
|
|||||||
SortParams,
|
SortParams,
|
||||||
create_pagination_meta
|
create_pagination_meta
|
||||||
)
|
)
|
||||||
from app.core.exceptions import NotFoundError, DuplicateError, AuthorizationError, ErrorCode
|
from app.schemas.organizations import (
|
||||||
|
OrganizationResponse,
|
||||||
|
OrganizationCreate,
|
||||||
|
OrganizationUpdate,
|
||||||
|
OrganizationMemberResponse
|
||||||
|
)
|
||||||
|
from app.schemas.users import UserResponse, UserCreate, UserUpdate
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -5,30 +5,28 @@ Organization endpoints for regular users.
|
|||||||
These endpoints allow users to view and manage organizations they belong to.
|
These endpoints allow users to view and manage organizations they belong to.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Query, status
|
from fastapi import APIRouter, Depends, Query
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.api.dependencies.auth import get_current_user
|
from app.api.dependencies.auth import get_current_user
|
||||||
from app.api.dependencies.permissions import require_org_admin, require_org_membership, get_current_org_role
|
from app.api.dependencies.permissions import require_org_admin, require_org_membership
|
||||||
from app.core.database_async import get_async_db
|
from app.core.database_async import get_async_db
|
||||||
|
from app.core.exceptions import NotFoundError, ErrorCode
|
||||||
from app.crud.organization_async import organization_async as organization_crud
|
from app.crud.organization_async import organization_async as organization_crud
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.models.user_organization import OrganizationRole
|
from app.schemas.common import (
|
||||||
|
PaginationParams,
|
||||||
|
PaginatedResponse,
|
||||||
|
create_pagination_meta
|
||||||
|
)
|
||||||
from app.schemas.organizations import (
|
from app.schemas.organizations import (
|
||||||
OrganizationResponse,
|
OrganizationResponse,
|
||||||
OrganizationMemberResponse,
|
OrganizationMemberResponse,
|
||||||
OrganizationUpdate
|
OrganizationUpdate
|
||||||
)
|
)
|
||||||
from app.schemas.common import (
|
|
||||||
PaginationParams,
|
|
||||||
PaginatedResponse,
|
|
||||||
MessageResponse,
|
|
||||||
create_pagination_meta
|
|
||||||
)
|
|
||||||
from app.core.exceptions import NotFoundError, AuthorizationError, ErrorCode
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -6,15 +6,19 @@ from typing import Any, Optional
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Query, status, Request
|
from fastapi import APIRouter, Depends, Query, status, Request
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from slowapi import Limiter
|
from slowapi import Limiter
|
||||||
from slowapi.util import get_remote_address
|
from slowapi.util import get_remote_address
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.api.dependencies.auth import get_current_user, get_current_superuser
|
from app.api.dependencies.auth import get_current_user, get_current_superuser
|
||||||
from app.core.database_async import get_async_db
|
from app.core.database_async import get_async_db
|
||||||
|
from app.core.exceptions import (
|
||||||
|
NotFoundError,
|
||||||
|
AuthorizationError,
|
||||||
|
ErrorCode
|
||||||
|
)
|
||||||
from app.crud.user_async import user_async as user_crud
|
from app.crud.user_async import user_async as user_crud
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.schemas.users import UserResponse, UserUpdate, PasswordChange
|
|
||||||
from app.schemas.common import (
|
from app.schemas.common import (
|
||||||
PaginationParams,
|
PaginationParams,
|
||||||
PaginatedResponse,
|
PaginatedResponse,
|
||||||
@@ -22,12 +26,8 @@ from app.schemas.common import (
|
|||||||
SortParams,
|
SortParams,
|
||||||
create_pagination_meta
|
create_pagination_meta
|
||||||
)
|
)
|
||||||
|
from app.schemas.users import UserResponse, UserUpdate, PasswordChange
|
||||||
from app.services.auth_service import AuthService, AuthenticationError
|
from app.services.auth_service import AuthService, AuthenticationError
|
||||||
from app.core.exceptions import (
|
|
||||||
NotFoundError,
|
|
||||||
AuthorizationError,
|
|
||||||
ErrorCode
|
|
||||||
)
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from pydantic_settings import BaseSettings
|
|
||||||
from typing import Optional, List
|
|
||||||
from pydantic import Field, field_validator
|
|
||||||
import logging
|
import logging
|
||||||
|
from typing import Optional, List
|
||||||
|
|
||||||
|
from pydantic import Field, field_validator
|
||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
import logging
|
import logging
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from typing import Generator
|
from typing import Generator
|
||||||
|
|
||||||
from sqlalchemy import create_engine, text
|
from sqlalchemy import create_engine, text
|
||||||
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
|
from sqlalchemy.ext.compiler import compiles
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from sqlalchemy.orm import sessionmaker, Session
|
from sqlalchemy.orm import sessionmaker, Session
|
||||||
from sqlalchemy.ext.compiler import compiles
|
|
||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from contextlib import asynccontextmanager
|
|||||||
from typing import AsyncGenerator
|
from typing import AsyncGenerator
|
||||||
|
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
from sqlalchemy.ext.asyncio import (
|
from sqlalchemy.ext.asyncio import (
|
||||||
AsyncSession,
|
AsyncSession,
|
||||||
AsyncEngine,
|
AsyncEngine,
|
||||||
@@ -17,7 +18,6 @@ from sqlalchemy.ext.asyncio import (
|
|||||||
async_sessionmaker,
|
async_sessionmaker,
|
||||||
)
|
)
|
||||||
from sqlalchemy.ext.compiler import compiles
|
from sqlalchemy.ext.compiler import compiles
|
||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
|
||||||
from sqlalchemy.orm import DeclarativeBase
|
from sqlalchemy.orm import DeclarativeBase
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
|||||||
@@ -2,10 +2,11 @@
|
|||||||
Custom exceptions and global exception handlers for the API.
|
Custom exceptions and global exception handlers for the API.
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from typing import Optional, Union, List
|
from typing import Optional, Union
|
||||||
|
|
||||||
from fastapi import HTTPException, Request, status
|
from fastapi import HTTPException, Request, status
|
||||||
from fastapi.responses import JSONResponse
|
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
from app.schemas.errors import ErrorCode, ErrorDetail, ErrorResponse
|
from app.schemas.errors import ErrorCode, ErrorDetail, ErrorResponse
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# app/crud/__init__.py
|
# app/crud/__init__.py
|
||||||
from .user import user
|
|
||||||
from .session import session as session_crud
|
|
||||||
from .organization import organization
|
from .organization import organization
|
||||||
|
from .session import session as session_crud
|
||||||
|
from .user import user
|
||||||
|
|
||||||
__all__ = ["user", "session_crud", "organization"]
|
__all__ = ["user", "session_crud", "organization"]
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union, Tuple
|
|
||||||
from datetime import datetime, timezone
|
|
||||||
from fastapi.encoders import jsonable_encoder
|
|
||||||
from pydantic import BaseModel
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from sqlalchemy.exc import IntegrityError, OperationalError, DataError
|
|
||||||
from sqlalchemy import func, asc, desc
|
|
||||||
from app.core.database import Base
|
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union, Tuple
|
||||||
|
|
||||||
|
from fastapi.encoders import jsonable_encoder
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from sqlalchemy import asc, desc
|
||||||
|
from sqlalchemy.exc import IntegrityError, OperationalError, DataError
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
|
from app.core.database import Base
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ Async CRUD operations base class using SQLAlchemy 2.0 async patterns.
|
|||||||
|
|
||||||
Provides reusable create, read, update, and delete operations for all models.
|
Provides reusable create, read, update, and delete operations for all models.
|
||||||
"""
|
"""
|
||||||
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union, Tuple
|
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
|
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, Union, Tuple
|
||||||
|
|
||||||
from fastapi.encoders import jsonable_encoder
|
from fastapi.encoders import jsonable_encoder
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from sqlalchemy import func, select
|
from sqlalchemy import func, select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from sqlalchemy.exc import IntegrityError, OperationalError, DataError
|
from sqlalchemy.exc import IntegrityError, OperationalError, DataError
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.orm import Load
|
from sqlalchemy.orm import Load
|
||||||
|
|
||||||
from app.core.database_async import Base
|
from app.core.database_async import Base
|
||||||
|
|||||||
@@ -1,21 +1,20 @@
|
|||||||
# app/crud/organization.py
|
# app/crud/organization.py
|
||||||
from typing import Optional, List, Dict, Any, Union
|
import logging
|
||||||
|
from typing import Optional, List, Dict, Any
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
|
||||||
from sqlalchemy import func, or_, and_
|
from sqlalchemy import func, or_, and_
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from app.crud.base import CRUDBase
|
from app.crud.base import CRUDBase
|
||||||
from app.models.organization import Organization
|
from app.models.organization import Organization
|
||||||
from app.models.user_organization import UserOrganization, OrganizationRole
|
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
|
from app.models.user_organization import UserOrganization, OrganizationRole
|
||||||
from app.schemas.organizations import (
|
from app.schemas.organizations import (
|
||||||
OrganizationCreate,
|
OrganizationCreate,
|
||||||
OrganizationUpdate,
|
OrganizationUpdate
|
||||||
UserOrganizationCreate,
|
|
||||||
UserOrganizationUpdate
|
|
||||||
)
|
)
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +1,21 @@
|
|||||||
# app/crud/organization_async.py
|
# app/crud/organization_async.py
|
||||||
"""Async CRUD operations for Organization model using SQLAlchemy 2.0 patterns."""
|
"""Async CRUD operations for Organization model using SQLAlchemy 2.0 patterns."""
|
||||||
|
import logging
|
||||||
from typing import Optional, List, Dict, Any
|
from typing import Optional, List, Dict, Any
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
|
||||||
from sqlalchemy import func, or_, and_, select
|
from sqlalchemy import func, or_, and_, select
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.crud.base_async import CRUDBaseAsync
|
from app.crud.base_async import CRUDBaseAsync
|
||||||
from app.models.organization import Organization
|
from app.models.organization import Organization
|
||||||
from app.models.user_organization import UserOrganization, OrganizationRole
|
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
|
from app.models.user_organization import UserOrganization, OrganizationRole
|
||||||
from app.schemas.organizations import (
|
from app.schemas.organizations import (
|
||||||
OrganizationCreate,
|
OrganizationCreate,
|
||||||
OrganizationUpdate,
|
OrganizationUpdate,
|
||||||
)
|
)
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
"""
|
"""
|
||||||
CRUD operations for user sessions.
|
CRUD operations for user sessions.
|
||||||
"""
|
"""
|
||||||
|
import logging
|
||||||
from datetime import datetime, timezone, timedelta
|
from datetime import datetime, timezone, timedelta
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
import logging
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from app.crud.base import CRUDBase
|
from app.crud.base import CRUDBase
|
||||||
from app.models.user_session import UserSession
|
from app.models.user_session import UserSession
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
# app/crud/user.py
|
# app/crud/user.py
|
||||||
|
import logging
|
||||||
from typing import Optional, Union, Dict, Any, List, Tuple
|
from typing import Optional, Union, Dict, Any, List, Tuple
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
|
||||||
from sqlalchemy import or_, asc, desc
|
from sqlalchemy import or_, asc, desc
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
|
from app.core.auth import get_password_hash
|
||||||
from app.crud.base import CRUDBase
|
from app.crud.base import CRUDBase
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.schemas.users import UserCreate, UserUpdate
|
from app.schemas.users import UserCreate, UserUpdate
|
||||||
from app.core.auth import get_password_hash
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
# app/crud/user_async.py
|
# app/crud/user_async.py
|
||||||
"""Async CRUD operations for User model using SQLAlchemy 2.0 patterns."""
|
"""Async CRUD operations for User model using SQLAlchemy 2.0 patterns."""
|
||||||
|
import logging
|
||||||
|
from datetime import datetime, timezone
|
||||||
from typing import Optional, Union, Dict, Any, List, Tuple
|
from typing import Optional, Union, Dict, Any, List, Tuple
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from datetime import datetime, timezone
|
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
|
||||||
from sqlalchemy import or_, select, update
|
from sqlalchemy import or_, select, update
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
from app.core.auth import get_password_hash_async
|
||||||
from app.crud.base_async import CRUDBaseAsync
|
from app.crud.base_async import CRUDBaseAsync
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.schemas.users import UserCreate, UserUpdate
|
from app.schemas.users import UserCreate, UserUpdate
|
||||||
from app.core.auth import get_password_hash_async
|
|
||||||
import logging
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
# app/init_db.py
|
# app/init_db.py
|
||||||
import logging
|
import logging
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
from app.core.database import engine
|
||||||
from app.crud.user import user as user_crud
|
from app.crud.user import user as user_crud
|
||||||
from app.schemas.users import UserCreate
|
from app.schemas.users import UserCreate
|
||||||
from app.core.database import engine
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,12 @@ from typing import Dict, Any
|
|||||||
|
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
from fastapi import FastAPI, status, Request, HTTPException
|
from fastapi import FastAPI, status, Request, HTTPException
|
||||||
|
from fastapi.exceptions import RequestValidationError
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.responses import HTMLResponse, JSONResponse
|
from fastapi.responses import HTMLResponse, JSONResponse
|
||||||
from fastapi.exceptions import RequestValidationError
|
|
||||||
from slowapi import Limiter, _rate_limit_exceeded_handler
|
from slowapi import Limiter, _rate_limit_exceeded_handler
|
||||||
from slowapi.util import get_remote_address
|
|
||||||
from slowapi.errors import RateLimitExceeded
|
from slowapi.errors import RateLimitExceeded
|
||||||
from sqlalchemy import text
|
from slowapi.util import get_remote_address
|
||||||
|
|
||||||
from app.api.main import api_router
|
from app.api.main import api_router
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
|||||||
@@ -5,12 +5,11 @@ Imports all models to ensure they're registered with SQLAlchemy.
|
|||||||
# First import Base to avoid circular imports
|
# First import Base to avoid circular imports
|
||||||
from app.core.database import Base
|
from app.core.database import Base
|
||||||
from .base import TimestampMixin, UUIDMixin
|
from .base import TimestampMixin, UUIDMixin
|
||||||
|
from .organization import Organization
|
||||||
# Import models
|
# Import models
|
||||||
from .user import User
|
from .user import User
|
||||||
from .user_session import UserSession
|
|
||||||
from .organization import Organization
|
|
||||||
from .user_organization import UserOrganization, OrganizationRole
|
from .user_organization import UserOrganization, OrganizationRole
|
||||||
|
from .user_session import UserSession
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'Base', 'TimestampMixin', 'UUIDMixin',
|
'Base', 'TimestampMixin', 'UUIDMixin',
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
"""
|
"""
|
||||||
Common schemas used across the API for pagination, responses, filtering, and sorting.
|
Common schemas used across the API for pagination, responses, filtering, and sorting.
|
||||||
"""
|
"""
|
||||||
|
from enum import Enum
|
||||||
|
from math import ceil
|
||||||
from typing import Generic, TypeVar, List, Optional
|
from typing import Generic, TypeVar, List, Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
from enum import Enum
|
|
||||||
from pydantic import BaseModel, Field
|
|
||||||
from math import ceil
|
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ Error schemas for standardized API error responses.
|
|||||||
"""
|
"""
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
# app/schemas/users.py
|
# app/schemas/users.py
|
||||||
import re
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional, Dict, Any
|
from typing import Optional, Dict, Any
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import logging
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.core.auth import (
|
from app.core.auth import (
|
||||||
verify_password_async,
|
verify_password_async,
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ This service provides email sending functionality with a simple console/log-base
|
|||||||
placeholder that can be easily replaced with a real email provider (SendGrid, SES, etc.)
|
placeholder that can be easily replaced with a real email provider (SendGrid, SES, etc.)
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
from typing import List, Optional
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ Utility functions for extracting and parsing device information from HTTP reques
|
|||||||
"""
|
"""
|
||||||
import re
|
import re
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from fastapi import Request
|
from fastapi import Request
|
||||||
|
|
||||||
from app.schemas.sessions import DeviceInfo
|
from app.schemas.sessions import DeviceInfo
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import logging
|
import logging
|
||||||
from sqlalchemy import create_engine, event
|
|
||||||
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||||
from sqlalchemy.orm import sessionmaker, clear_mappers
|
from sqlalchemy.orm import sessionmaker
|
||||||
from sqlalchemy.pool import StaticPool
|
from sqlalchemy.pool import StaticPool
|
||||||
|
|
||||||
from app.core.database import Base
|
from app.core.database import Base
|
||||||
|
|||||||
Reference in New Issue
Block a user