refactor: reorganize import statements for consistency across multiple files

This commit is contained in:
Artem Kashaev 2025-12-01 16:26:10 +05:00
parent 1dd7c2f2b8
commit d2c424c419
24 changed files with 62 additions and 50 deletions

View File

@ -9,10 +9,11 @@ from collections.abc import Awaitable, Callable
from typing import Any from typing import Any
import redis.asyncio as redis import redis.asyncio as redis
from app.core.config import settings
from redis.asyncio.client import Redis from redis.asyncio.client import Redis
from redis.exceptions import RedisError from redis.exceptions import RedisError
from app.core.config import settings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -4,9 +4,10 @@ from __future__ import annotations
from collections.abc import AsyncGenerator from collections.abc import AsyncGenerator
from app.core.config import settings
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from app.core.config import settings
engine = create_async_engine(settings.database_url, echo=settings.sqlalchemy_echo) engine = create_async_engine(settings.database_url, echo=settings.sqlalchemy_echo)
AsyncSessionMaker = async_sessionmaker(bind=engine, expire_on_commit=False) AsyncSessionMaker = async_sessionmaker(bind=engine, expire_on_commit=False)

View File

@ -4,9 +4,10 @@ from __future__ import annotations
import logging import logging
from starlette.types import ASGIApp, Receive, Scope, Send
from app.core.cache import cache_manager from app.core.cache import cache_manager
from app.core.config import settings from app.core.config import settings
from starlette.types import ASGIApp, Receive, Scope, Send
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -7,9 +7,10 @@ from datetime import datetime, timedelta, timezone
from typing import Any from typing import Any
import jwt import jwt
from app.core.config import settings
from passlib.context import CryptContext # type: ignore from passlib.context import CryptContext # type: ignore
from app.core.config import settings
class PasswordHasher: class PasswordHasher:
"""Wraps passlib context to hash and verify secrets.""" """Wraps passlib context to hash and verify secrets."""

View File

@ -7,12 +7,10 @@ from enum import StrEnum
from typing import Any from typing import Any
from pydantic import BaseModel, ConfigDict, Field from pydantic import BaseModel, ConfigDict, Field
from sqlalchemy import DateTime, ForeignKey, Integer, func, text from sqlalchemy import DateTime, Enum as SqlEnum, ForeignKey, Integer, func, text
from sqlalchemy import Enum as SqlEnum
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.types import JSON as SA_JSON from sqlalchemy.types import JSON as SA_JSON, TypeDecorator
from sqlalchemy.types import TypeDecorator
from app.models.base import Base, enum_values from app.models.base import Base, enum_values

View File

@ -7,8 +7,7 @@ from decimal import Decimal
from enum import StrEnum from enum import StrEnum
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from sqlalchemy import DateTime, ForeignKey, Integer, Numeric, String, func from sqlalchemy import DateTime, Enum as SqlEnum, ForeignKey, Integer, Numeric, String, func
from sqlalchemy import Enum as SqlEnum
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.models.base import Base, enum_values from app.models.base import Base, enum_values

View File

@ -6,8 +6,7 @@ from datetime import datetime
from enum import StrEnum from enum import StrEnum
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from sqlalchemy import DateTime, ForeignKey, Integer, UniqueConstraint, func from sqlalchemy import DateTime, Enum as SqlEnum, ForeignKey, Integer, UniqueConstraint, func
from sqlalchemy import Enum as SqlEnum
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.models.base import Base, enum_values from app.models.base import Base, enum_values

View File

@ -13,11 +13,7 @@ from app.models.task import Task, TaskCreate
from app.repositories.activity_repo import ActivityOrganizationMismatchError, ActivityRepository from app.repositories.activity_repo import ActivityOrganizationMismatchError, ActivityRepository
from app.repositories.task_repo import ( from app.repositories.task_repo import (
TaskAccessError as RepoTaskAccessError, TaskAccessError as RepoTaskAccessError,
)
from app.repositories.task_repo import (
TaskOrganizationMismatchError as RepoTaskOrganizationMismatchError, TaskOrganizationMismatchError as RepoTaskOrganizationMismatchError,
)
from app.repositories.task_repo import (
TaskQueryParams, TaskQueryParams,
TaskRepository, TaskRepository,
) )

View File

@ -6,12 +6,13 @@ from collections.abc import AsyncGenerator
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from httpx import ASGITransport, AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from app.api.deps import get_cache_backend, get_db_session from app.api.deps import get_cache_backend, get_db_session
from app.core.security import password_hasher from app.core.security import password_hasher
from app.main import create_app from app.main import create_app
from app.models import Base from app.models import Base
from httpx import ASGITransport, AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from tests.utils.fake_redis import InMemoryRedis from tests.utils.fake_redis import InMemoryRedis

View File

@ -5,13 +5,14 @@ from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from datetime import timedelta from datetime import timedelta
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.core.security import jwt_service from app.core.security import jwt_service
from app.models.contact import Contact from app.models.contact import Contact
from app.models.deal import Deal from app.models.deal import Deal
from app.models.organization import Organization from app.models.organization import Organization
from app.models.organization_member import OrganizationMember, OrganizationRole from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User from app.models.user import User
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
@dataclass(slots=True) @dataclass(slots=True)

View File

@ -5,9 +5,10 @@ from __future__ import annotations
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import pytest import pytest
from app.models.activity import Activity, ActivityType
from httpx import AsyncClient from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.models.activity import Activity, ActivityType
from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario

View File

@ -7,14 +7,15 @@ from datetime import datetime, timedelta, timezone
from decimal import Decimal from decimal import Decimal
import pytest import pytest
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.core.security import jwt_service from app.core.security import jwt_service
from app.models.contact import Contact from app.models.contact import Contact
from app.models.deal import Deal, DealStage, DealStatus from app.models.deal import Deal, DealStage, DealStatus
from app.models.organization import Organization from app.models.organization import Organization
from app.models.organization_member import OrganizationMember, OrganizationRole from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User from app.models.user import User
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
@dataclass(slots=True) @dataclass(slots=True)

View File

@ -3,13 +3,14 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from httpx import AsyncClient
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.core.security import password_hasher from app.core.security import password_hasher
from app.models.organization import Organization from app.models.organization import Organization
from app.models.organization_member import OrganizationMember, OrganizationRole from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User from app.models.user import User
from httpx import AsyncClient
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
@pytest.mark.asyncio @pytest.mark.asyncio

View File

@ -3,12 +3,13 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from app.models.contact import Contact
from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User
from httpx import AsyncClient from httpx import AsyncClient
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.models.contact import Contact
from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User
from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario

View File

@ -5,11 +5,12 @@ from __future__ import annotations
from decimal import Decimal from decimal import Decimal
import pytest import pytest
from app.models.activity import Activity, ActivityType
from app.models.deal import Deal, DealStage, DealStatus
from httpx import AsyncClient from httpx import AsyncClient
from sqlalchemy import select from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.models.activity import Activity, ActivityType
from app.models.deal import Deal, DealStage, DealStatus
from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario from tests.api.v1.task_activity_shared import auth_headers, make_token, prepare_scenario

View File

@ -8,6 +8,11 @@ from typing import cast
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from httpx import ASGITransport, AsyncClient
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.schema import Table
from app.api.deps import get_db_session from app.api.deps import get_db_session
from app.core.security import jwt_service from app.core.security import jwt_service
from app.main import create_app from app.main import create_app
@ -15,10 +20,6 @@ from app.models import Base
from app.models.organization import Organization from app.models.organization import Organization
from app.models.organization_member import OrganizationMember, OrganizationRole from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User from app.models.user import User
from httpx import ASGITransport, AsyncClient
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.schema import Table
@pytest_asyncio.fixture() @pytest_asyncio.fixture()

View File

@ -5,9 +5,10 @@ from __future__ import annotations
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import pytest import pytest
from app.models.task import Task
from httpx import AsyncClient from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
from app.models.task import Task
from tests.api.v1.task_activity_shared import ( from tests.api.v1.task_activity_shared import (
auth_headers, auth_headers,
create_deal, create_deal,

View File

@ -7,6 +7,9 @@ from collections.abc import AsyncGenerator
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from app.models.activity import Activity, ActivityType from app.models.activity import Activity, ActivityType
from app.models.base import Base from app.models.base import Base
from app.models.contact import Contact from app.models.contact import Contact
@ -22,8 +25,6 @@ from app.services.activity_service import (
ActivityValidationError, ActivityValidationError,
) )
from app.services.organization_service import OrganizationContext from app.services.organization_service import OrganizationContext
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
@pytest_asyncio.fixture() @pytest_asyncio.fixture()

View File

@ -8,6 +8,9 @@ from decimal import Decimal
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from app.models import Base from app.models import Base
from app.models.contact import Contact from app.models.contact import Contact
from app.models.deal import Deal, DealStage, DealStatus from app.models.deal import Deal, DealStage, DealStatus
@ -16,8 +19,6 @@ from app.models.organization_member import OrganizationMember, OrganizationRole
from app.models.user import User from app.models.user import User
from app.repositories.analytics_repo import AnalyticsRepository from app.repositories.analytics_repo import AnalyticsRepository
from app.services.analytics_service import AnalyticsService, invalidate_analytics_cache from app.services.analytics_service import AnalyticsService, invalidate_analytics_cache
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from tests.utils.fake_redis import InMemoryRedis from tests.utils.fake_redis import InMemoryRedis

View File

@ -6,11 +6,12 @@ from typing import cast
from unittest.mock import MagicMock from unittest.mock import MagicMock
import pytest # type: ignore[import-not-found] import pytest # type: ignore[import-not-found]
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.security import JWTService, PasswordHasher from app.core.security import JWTService, PasswordHasher
from app.models.user import User from app.models.user import User
from app.repositories.user_repo import UserRepository from app.repositories.user_repo import UserRepository
from app.services.auth_service import AuthService, InvalidCredentialsError, InvalidRefreshTokenError from app.services.auth_service import AuthService, InvalidCredentialsError, InvalidRefreshTokenError
from sqlalchemy.ext.asyncio import AsyncSession
class StubUserRepository(UserRepository): class StubUserRepository(UserRepository):

View File

@ -7,6 +7,10 @@ from collections.abc import AsyncGenerator
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from app.models.base import Base from app.models.base import Base
from app.models.contact import Contact, ContactCreate from app.models.contact import Contact, ContactCreate
from app.models.deal import Deal from app.models.deal import Deal
@ -22,9 +26,6 @@ from app.services.contact_service import (
ContactUpdateData, ContactUpdateData,
) )
from app.services.organization_service import OrganizationContext from app.services.organization_service import OrganizationContext
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
@pytest_asyncio.fixture() @pytest_asyncio.fixture()

View File

@ -8,6 +8,10 @@ from decimal import Decimal
import pytest # type: ignore[import-not-found] import pytest # type: ignore[import-not-found]
import pytest_asyncio # type: ignore[import-not-found] import pytest_asyncio # type: ignore[import-not-found]
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from app.models.activity import Activity, ActivityType from app.models.activity import Activity, ActivityType
from app.models.base import Base from app.models.base import Base
from app.models.contact import Contact from app.models.contact import Contact
@ -25,9 +29,6 @@ from app.services.deal_service import (
DealUpdateData, DealUpdateData,
) )
from app.services.organization_service import OrganizationContext from app.services.organization_service import OrganizationContext
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
@pytest_asyncio.fixture() @pytest_asyncio.fixture()

View File

@ -6,6 +6,8 @@ from typing import cast
from unittest.mock import MagicMock from unittest.mock import MagicMock
import pytest # type: ignore[import-not-found] import pytest # type: ignore[import-not-found]
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.organization import Organization from app.models.organization import Organization
from app.models.organization_member import OrganizationMember, OrganizationRole from app.models.organization_member import OrganizationMember, OrganizationRole
from app.repositories.org_repo import OrganizationRepository from app.repositories.org_repo import OrganizationRepository
@ -17,7 +19,6 @@ from app.services.organization_service import (
OrganizationMemberAlreadyExistsError, OrganizationMemberAlreadyExistsError,
OrganizationService, OrganizationService,
) )
from sqlalchemy.ext.asyncio import AsyncSession
class StubOrganizationRepository(OrganizationRepository): class StubOrganizationRepository(OrganizationRepository):

View File

@ -8,6 +8,10 @@ from datetime import datetime, timedelta, timezone
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
from app.models.activity import Activity, ActivityType from app.models.activity import Activity, ActivityType
from app.models.base import Base from app.models.base import Base
from app.models.contact import Contact from app.models.contact import Contact
@ -25,9 +29,6 @@ from app.services.task_service import (
TaskService, TaskService,
TaskUpdateData, TaskUpdateData,
) )
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
from sqlalchemy.pool import StaticPool
@pytest_asyncio.fixture() @pytest_asyncio.fixture()