Skip to content

noamsto/starlette-admin-litestar-plugin

Repository files navigation

Starlette Admin Litestar Plugin

Python Litestar uv Ruff Checked with mypy pre-commit

A plugin that integrates Starlette Admin with Litestar, providing a powerful and flexible admin interface for your Litestar applications.

This project is inspired by and based on SQLAdmin Litestar Plugin by Peter Schutt.

Features

  • Seamless integration with Starlette Admin
  • Support for both sync and async SQLAlchemy engines
  • Advanced Alchemy integration with UUID7 support
  • Customizable admin interface
  • Authentication support
  • I18n support

Installation

pip install starlette-admin-litestar-plugin

Basic Usage

from litestar import Litestar
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from starlette_admin.contrib.sqla import ModelView
from starlette_admin_litestar_plugin import StarlettAdminPluginConfig, StarletteAdminPlugin

# Create engine and models
engine = create_async_engine("sqlite+aiosqlite:///:memory:")

class Base(DeclarativeBase):
    pass

class Product(Base):
    __tablename__ = "products"
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    price: Mapped[int]

# Configure admin
admin_config = StarlettAdminPluginConfig(
    views=[ModelView(Product)],
    engine=engine,
    title="My Admin",
)

# Create app
app = Litestar(
    plugins=[StarletteAdminPlugin(starlette_admin_config=admin_config)]
)

Advanced Alchemy Support! Usage with UUID7 Models

from advanced_alchemy.base import UUIDv7AuditBase
from pydantic import BaseModel, Field
from starlette_admin_litestar_plugin.ext.advanced_alchemy import UUIDModelView

# Define model with UUID and audit
class Product(UUIDv7AuditBase):
    __tablename__ = "products"
    name: Mapped[str]
    price: Mapped[int]

# Optional: Add validation
class ProductInput(BaseModel):
    name: str = Field(..., max_length=100)
    price: int = Field(..., ge=0)

# Configure admin with UUID support
admin_config = StarlettAdminPluginConfig(
    views=[UUIDModelView(Product, pydantic_model=ProductInput)],
    engine=engine,
    title="Advanced Admin",
)

app = Litestar(
    plugins=[StarletteAdminPlugin(starlette_admin_config=admin_config)]
)

See advanced-alchemy repo for more info.

Configuration Options

Option Type Description Default
views Sequence[ModelView] List of admin views []
engine Engine | AsyncEngine SQLAlchemy engine Required
title str Admin interface title "Admin"
base_url str Base URL path "/admin"
auth_provider BaseAuthProvider Authentication provider None
i18n_config I18nConfig Internationalization config None

For more configuration options and features, please refer to the Starlette Admin documentation.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.