diff --git a/pyproject.toml b/pyproject.toml index fcfdcf85..92ccc900 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,8 +13,6 @@ dependencies = [ "uvicorn>=0.27.0", "uvloop>=0.19.0", "httptools>=0.7.1", - "uuid>=1.30", - "uuid6>=2024.1.12", "alembic>=1.13.1", "asyncpg>=0.29.0", "SQLAlchemy-Utils>=0.41.1", diff --git a/src/app/core/db/models.py b/src/app/core/db/models.py index 0ade95ff..67e290db 100644 --- a/src/app/core/db/models.py +++ b/src/app/core/db/models.py @@ -4,12 +4,11 @@ from sqlalchemy import Boolean, DateTime, text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column -from uuid6 import uuid7 class UUIDMixin: uuid: Mapped[uuid_pkg.UUID] = mapped_column( - UUID(as_uuid=True), primary_key=True, default=uuid7, server_default=text("gen_random_uuid()") + UUID(as_uuid=True), primary_key=True, default=uuid_pkg.uuid4, server_default=text("gen_random_uuid()") ) diff --git a/src/app/core/schemas.py b/src/app/core/schemas.py index 9566aa52..c1c0d73a 100644 --- a/src/app/core/schemas.py +++ b/src/app/core/schemas.py @@ -3,7 +3,6 @@ from typing import Any from pydantic import BaseModel, Field, field_serializer -from uuid6 import uuid7 class HealthCheck(BaseModel): @@ -25,7 +24,7 @@ class ReadyCheck(BaseModel): # -------------- mixins -------------- class UUIDSchema(BaseModel): - uuid: uuid_pkg.UUID = Field(default_factory=uuid7) + uuid: uuid_pkg.UUID = Field(default_factory=uuid_pkg.uuid4) class TimestampSchema(BaseModel): diff --git a/src/app/models/post.py b/src/app/models/post.py index 032e9ca9..57ae0a9a 100644 --- a/src/app/models/post.py +++ b/src/app/models/post.py @@ -3,7 +3,6 @@ from sqlalchemy import UUID, DateTime, ForeignKey, String from sqlalchemy.orm import Mapped, mapped_column -from uuid6 import uuid7 from ..core.db.database import Base @@ -15,7 +14,7 @@ class Post(Base): created_by_user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), index=True) title: Mapped[str] = mapped_column(String(30)) text: Mapped[str] = mapped_column(String(63206)) - uuid: Mapped[uuid_pkg.UUID] = mapped_column(UUID(as_uuid=True), default_factory=uuid7, unique=True) + uuid: Mapped[uuid_pkg.UUID] = mapped_column(UUID(as_uuid=True), default_factory=uuid_pkg.uuid4, unique=True) media_url: Mapped[str | None] = mapped_column(String, default=None) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default_factory=lambda: datetime.now(UTC)) diff --git a/src/app/models/user.py b/src/app/models/user.py index 07cca2d8..5298a3f9 100644 --- a/src/app/models/user.py +++ b/src/app/models/user.py @@ -4,7 +4,6 @@ from sqlalchemy import DateTime, ForeignKey, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column -from uuid6 import uuid7 from ..core.db.database import Base @@ -20,7 +19,7 @@ class User(Base): hashed_password: Mapped[str] = mapped_column(String) profile_image_url: Mapped[str] = mapped_column(String, default="https://profileimageurl.com") - uuid: Mapped[uuid_pkg.UUID] = mapped_column(UUID(as_uuid=True), default_factory=uuid7, unique=True) + uuid: Mapped[uuid_pkg.UUID] = mapped_column(UUID(as_uuid=True), default_factory=uuid_pkg.uuid4, unique=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default_factory=lambda: datetime.now(UTC)) updated_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), default=None) deleted_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), default=None) diff --git a/src/scripts/create_first_superuser.py b/src/scripts/create_first_superuser.py index baf58af6..a436cbc3 100644 --- a/src/scripts/create_first_superuser.py +++ b/src/scripts/create_first_superuser.py @@ -1,10 +1,10 @@ import asyncio import logging +import uuid from datetime import UTC, datetime from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer, MetaData, String, Table, insert, select from sqlalchemy.dialects.postgresql import UUID -from uuid6 import uuid7 # 126 from ..app.core.config import settings from ..app.core.db.database import AsyncSession, async_engine, local_session @@ -37,7 +37,7 @@ async def create_first_user(session: AsyncSession) -> None: Column("email", String(50), nullable=False, unique=True, index=True), Column("hashed_password", String, nullable=False), Column("profile_image_url", String, default="https://profileimageurl.com"), - Column("uuid", UUID(as_uuid=True), default=uuid7, unique=True), + Column("uuid", UUID(as_uuid=True), default=uuid.uuid4, unique=True), Column("created_at", DateTime(timezone=True), default=lambda: datetime.now(UTC), nullable=False), Column("updated_at", DateTime), Column("deleted_at", DateTime), diff --git a/tests/conftest.py b/tests/conftest.py index 22038f1b..935cef91 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -72,13 +72,13 @@ def sample_user_data(): @pytest.fixture def sample_user_read(): """Generate a sample UserRead object.""" - from uuid6 import uuid7 + import uuid from src.app.schemas.user import UserRead return UserRead( id=1, - uuid=uuid7(), + uuid=uuid.uuid4(), name=fake.name(), username=fake.user_name(), email=fake.email(), diff --git a/uv.lock b/uv.lock index 10c85d61..5295439d 100644 --- a/uv.lock +++ b/uv.lock @@ -405,8 +405,6 @@ dependencies = [ { name = "sqlalchemy" }, { name = "sqlalchemy-utils" }, { name = "structlog" }, - { name = "uuid" }, - { name = "uuid6" }, { name = "uvicorn" }, { name = "uvloop" }, ] @@ -459,8 +457,6 @@ requires-dist = [ { name = "sqlalchemy-utils", specifier = ">=0.41.1" }, { name = "structlog", specifier = ">=25.1.0,<=25.5.0" }, { name = "types-redis", marker = "extra == 'dev'", specifier = ">=4.6.0" }, - { name = "uuid", specifier = ">=1.30" }, - { name = "uuid6", specifier = ">=2024.1.12" }, { name = "uvicorn", specifier = ">=0.27.0" }, { name = "uvloop", specifier = ">=0.19.0" }, ] @@ -1500,21 +1496,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8f/1c/20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662/user_agents-2.2.0-py3-none-any.whl", hash = "sha256:a98c4dc72ecbc64812c4534108806fb0a0b3a11ec3fd1eafe807cee5b0a942e7", size = 9614, upload-time = "2020-08-23T06:01:54.047Z" }, ] -[[package]] -name = "uuid" -version = "1.30" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/63/f42f5aa951ebf2c8dac81f77a8edcc1c218640a2a35a03b9ff2d4aa64c3d/uuid-1.30.tar.gz", hash = "sha256:1f87cc004ac5120466f36c5beae48b4c48cc411968eed0eaecd3da82aa96193f", size = 5811, upload-time = "2007-05-26T11:13:24Z" } - -[[package]] -name = "uuid6" -version = "2025.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/b7/4c0f736ca824b3a25b15e8213d1bcfc15f8ac2ae48d1b445b310892dc4da/uuid6-2025.0.1.tar.gz", hash = "sha256:cd0af94fa428675a44e32c5319ec5a3485225ba2179eefcf4c3f205ae30a81bd", size = 13932, upload-time = "2025-07-04T18:30:35.186Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/b2/93faaab7962e2aa8d6e174afb6f76be2ca0ce89fde14d3af835acebcaa59/uuid6-2025.0.1-py3-none-any.whl", hash = "sha256:80530ce4d02a93cdf82e7122ca0da3ebbbc269790ec1cb902481fa3e9cc9ff99", size = 6979, upload-time = "2025-07-04T18:30:34.001Z" }, -] - [[package]] name = "uvicorn" version = "0.34.3"