Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,14 @@
(PY_CLASS, "NoneType"),
(PY_CLASS, "litestar._openapi.schema_generation.schema.SchemaCreator"),
(PY_CLASS, "litestar._signature.model.SignatureModel"),
(PY_CLASS, "litestar.contrib.sqlalchemy.plugins.init.config.compat._CreateEngineMixin"),
(PY_CLASS, "litestar.utils.signature.ParsedSignature"),
(PY_CLASS, "litestar.utils.sync.AsyncCallable"),
# types in changelog that no longer exist
(PY_ATTR, "litestar.dto.factory.DTOConfig.underscore_fields_private"),
(PY_CLASS, "anyio.abc.BlockingPortal"),
(PY_CLASS, "litestar.contrib.msgspec.MsgspecDTO"),
(PY_CLASS, "litestar.contrib.sqlalchemy.types.JsonB"),
(PY_CLASS, "litestar.contrib.sqlalchemy.plugins.SQLAlchemyInitPlugin"),
(PY_CLASS, "litestar.contrib.repository.filters.NotInCollectionFilter"),
(PY_CLASS, "litestar.contrib.repository.filters.NotInSearchFilter"),
(PY_CLASS, "litestar.contrib.repository.filters.OnBeforeAfter"),
Expand All @@ -168,12 +169,7 @@
(PY_CLASS, "litestar.response.RedirectResponse"),
(PY_CLASS, "litestar.response_containers.Redirect"),
(PY_CLASS, "litestar.response_containers.Template"),
(PY_CLASS, "litestar.contrib.sqlalchemy.plugins.SQLAlchemyPlugin"),
(PY_CLASS, "litestar.contrib.sqlalchemy.plugins.SQLAlchemySerializationPlugin"),
(PY_CLASS, "litestar.contrib.sqlalchemy.plugins.SQLAlchemyInitPlugin"),
(PY_CLASS, "litestar.contrib.sqlalchemy.dto.SQLAlchemyDTO"),
(PY_CLASS, "litestar.contrib.sqlalchemy.types.BigIntIdentity"),
(PY_CLASS, "litestar.contrib.sqlalchemy.types.JsonB"),
(PY_CLASS, "litestar.contrib.htmx.request.HTMXRequest"),
(PY_CLASS, "litestar.typing.ParsedType"),
(PY_METH, "litestar.dto.factory.DTOData.create_instance"),
(PY_METH, "litestar.dto.interface.DTOInterface.data_to_encodable_type"),
Expand Down Expand Up @@ -208,6 +204,8 @@
(PY_CLASS, "advanced_alchemy.base.UUIDAuditBase"),
(PY_CLASS, "advanced_alchemy.base.BigIntBase"),
(PY_CLASS, "advanced_alchemy.base.BigIntAuditBase"),
(PY_CLASS, "advanced_alchemy.extensions.litestar.plugins.SQLAlchemySerializationPlugin"),
(PY_CLASS, "advanced_alchemy.extensions.litestar.plugins.SQLAlchemyInitPlugin"),
]

nitpick_ignore_regex = [
Expand All @@ -220,7 +218,6 @@
(PY_RE, r".*UserType"),
(PY_RE, r"ModelT"),
(PY_RE, r"litestar.*\.T"),
(PY_RE, r"litestar.contrib.sqlalchemy.repository.ModelT"),
(PY_RE, r"litestar\.middleware\.session\.base\.BaseSessionBackendT"),
(PY_RE, r"litestar\.types.*"),
(PY_RE, r"httpx.*"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
from datetime import datetime
from typing import Generic, TypeVar

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped

from litestar import Litestar, get
from litestar.dto import DTOConfig
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
from typing import Annotated
from uuid import UUID

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship

from litestar import Litestar, post
from litestar.dto import DTOConfig, dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
from typing import Annotated
from uuid import UUID

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship

from litestar import Litestar, post
from litestar.dto import DTOConfig, dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from datetime import datetime

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped, mapped_column

from litestar import Litestar, post
from litestar.dto import dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
3 changes: 1 addition & 2 deletions docs/examples/data_transfer_objects/factory/my_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

from typing import Any

from advanced_alchemy.extensions.litestar import base, mixins
from sqlalchemy.orm import DeclarativeBase

from litestar.plugins.sqlalchemy import base, mixins


class _Base(base.CommonTableAttributes, mixins.UUIDPrimaryKey, DeclarativeBase):
"""Fake base SQLAlchemy model for typing purposes."""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from datetime import datetime

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped

from litestar import Litestar, get
from litestar.dto import DTOConfig
from litestar.pagination import ClassicPagination
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
from typing import Annotated
from uuid import UUID

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship

from litestar import Litestar, put
from litestar.dto import DTOConfig
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from datetime import datetime
from typing import Annotated

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped, mapped_column

from litestar import Litestar, post
from litestar.dto import DTOConfig, dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from datetime import datetime
from typing import Annotated

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped, mapped_column

from litestar import Litestar, post
from litestar.dto import DTOConfig, dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from datetime import datetime

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped

from litestar import Litestar, Response, get
from litestar.dto import DTOConfig
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from datetime import datetime

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped

from litestar import Litestar, post
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from datetime import datetime

from advanced_alchemy.extensions.litestar import SQLAlchemyDTO
from sqlalchemy.orm import Mapped, mapped_column

from litestar import Litestar, post
from litestar.dto import dto_field
from litestar.plugins.sqlalchemy import SQLAlchemyDTO

from .my_lib import Base

Expand Down

This file was deleted.

4 changes: 0 additions & 4 deletions docs/examples/plugins/sqlalchemy/configure.py

This file was deleted.

8 changes: 0 additions & 8 deletions docs/examples/plugins/sqlalchemy/modelling.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
from collections.abc import AsyncGenerator
from typing import Optional

from advanced_alchemy.extensions.litestar import (
SQLAlchemyAsyncConfig,
SQLAlchemyInitPlugin,
SQLAlchemySerializationPlugin,
)
from sqlalchemy import select
from sqlalchemy.exc import IntegrityError, NoResultFound
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

from litestar import Litestar, get, post, put
from litestar.exceptions import ClientException, NotFoundException
from litestar.status_codes import HTTP_409_CONFLICT


class Base(DeclarativeBase): ...


class TodoItem(Base):
__tablename__ = "todo_items"

title: Mapped[str] = mapped_column(primary_key=True)
done: Mapped[bool]


async def provide_transaction(db_session: AsyncSession) -> AsyncGenerator[AsyncSession, None]:
try:
async with db_session.begin():
yield db_session
except IntegrityError as exc:
raise ClientException(
status_code=HTTP_409_CONFLICT,
detail=str(exc),
) from exc


async def get_todo_by_title(todo_name: str, session: AsyncSession) -> TodoItem:
query = select(TodoItem).where(TodoItem.title == todo_name)
result = await session.execute(query)
try:
return result.scalar_one()
except NoResultFound as e:
raise NotFoundException(detail=f"TODO {todo_name!r} not found") from e


async def get_todo_list(done: Optional[bool], session: AsyncSession) -> list[TodoItem]:
query = select(TodoItem)
if done is not None:
query = query.where(TodoItem.done.is_(done))

result = await session.execute(query)
return list(result.scalars().all())


@get("/")
async def get_list(transaction: AsyncSession, done: Optional[bool] = None) -> list[TodoItem]:
return await get_todo_list(done, transaction)


@post("/")
async def add_item(data: TodoItem, transaction: AsyncSession) -> TodoItem:
transaction.add(data)
return data


@put("/{item_title:str}")
async def update_item(item_title: str, data: TodoItem, transaction: AsyncSession) -> TodoItem:
todo_item = await get_todo_by_title(item_title, transaction)
todo_item.title = data.title
todo_item.done = data.done
return todo_item


db_config = SQLAlchemyAsyncConfig(
connection_string="sqlite+aiosqlite:///todo.sqlite", metadata=Base.metadata, create_all=True
)

app = Litestar(
[get_list, add_item, update_item],
dependencies={"transaction": provide_transaction},
plugins=[
SQLAlchemySerializationPlugin(),
SQLAlchemyInitPlugin(db_config),
],
)
Loading
Loading