Skip to main content

Enterprise Admin Framework for FastAPI — auto-generates admin UI and JSON API for SQLAlchemy models

Project description

Aegis Admin

PyPI version Python License: MIT

Aegis is an enterprise admin framework for FastAPI that auto-generates a full admin UI and JSON API for your SQLAlchemy models — with zero boilerplate.


Features

  • Auto-generated admin UI — list, create, edit, delete for every registered model
  • Searchable list views — ILIKE search across all string columns
  • Bulk delete — select multiple records and delete in one action
  • FK dropdowns & autocomplete — foreign key fields render as <select> or live-search autocomplete
  • JSON API endpoints — paginated, filterable, searchable REST endpoints alongside the UI
  • Pluggable auth — bring your own session, JWT, OAuth2, or any custom backend
  • Multi-database support — register models against different database engines
  • Async-first — built on SQLAlchemy 2.0 async engine

Installation

pip install aegis-admin

Also install an async database driver, e.g. aiosqlite for SQLite or asyncpg for PostgreSQL.


Quick Start

from fastapi import FastAPI
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.ext.asyncio import create_async_engine

from aegis.core.app import Aegis
from aegis.core.auth import AllowAllAuthBackend   # swap for your own in production

class Base(DeclarativeBase):
    pass

class User(Base):
    __tablename__ = "users"
    id     = Column(Integer, primary_key=True)
    name   = Column(String(100))
    email  = Column(String(200))

app    = FastAPI()
engine = create_async_engine("sqlite+aiosqlite:///./app.db")

aegis = Aegis(
    app=app,
    engines={"default": engine},
    auth_backend=AllowAllAuthBackend(),   # replace with your auth backend
    title="My Admin",
)

aegis.register(User)

Visit http://localhost:8000/admin/ui/ to see the admin panel.


Authentication

Aegis does not ship with a built-in login page — it integrates with your project's existing auth system via the AuthBackend interface.

from fastapi import Request
from aegis.core.auth import AuthBackend

class MyAuthBackend(AuthBackend):
    async def get_current_user(self, request: Request):
        # Resolve the user from a cookie, JWT, session, etc.
        token = request.cookies.get("session")
        return await db.get_user_by_token(token)   # your existing logic

    async def is_authenticated(self, user) -> bool:
        # Return True only if this user may access the admin
        return user is not None and user.is_admin

Common patterns:

Pattern How
Cookie / session Read request.session["user_id"] (requires SessionMiddleware)
JWT Decode request.headers["Authorization"] or a cookie
Reuse existing dependency Call your verify_token() / get_current_user() directly

When a request is not authenticated, Aegis automatically redirects UI routes to login_url (default /login).


Endpoints Generated

For every registered model, Aegis creates:

Method Path Description
GET /admin/{table}/ JSON list — paginated, searchable, filterable
GET /admin/ui/{table}/ HTML list view with search + bulk delete
GET/POST /admin/ui/{table}/create/ Create form
GET/POST /admin/ui/{table}/{pk}/edit/ Edit form
GET/POST /admin/ui/{table}/{pk}/delete/ Delete confirmation
POST /admin/ui/{table}/bulk-delete/ Bulk delete confirmation
GET /admin/api/{table}/autocomplete/ FK autocomplete search

JSON API query parameters

GET /admin/users/?limit=50&offset=0&search=alice&role=admin
Param Description
limit Max 100, default 50
offset Pagination offset
search ILIKE search across all string columns
<column> Exact-match filter on any column

Multiple Databases

aegis = Aegis(
    app=app,
    engines={
        "default": primary_engine,
        "analytics": analytics_engine,
    },
    auth_backend=MyAuthBackend(),
)

aegis.register(User)                        # uses "default"
aegis.register(Report, database="analytics")

Configuration

aegis = Aegis(
    app=app,
    engines={"default": engine},
    auth_backend=MyAuthBackend(),
    base_path="/admin",      # URL prefix (default: /admin)
    title="My Admin",        # Shown in the UI header
    login_url="/login",      # Redirect target when unauthenticated
)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aegis_admin-0.1.0.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aegis_admin-0.1.0-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file aegis_admin-0.1.0.tar.gz.

File metadata

  • Download URL: aegis_admin-0.1.0.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for aegis_admin-0.1.0.tar.gz
Algorithm Hash digest
SHA256 16d25fd9d1f901789f386649dc79bf87eeb4ed20a0be98e7e247dfece8cb5ffd
MD5 12793d91d620157197b8487e1a4e62fb
BLAKE2b-256 23ac42ac99c0e1f7ee680167eed991ae0e49ae3a4d912526d78bfc73992578bd

See more details on using hashes here.

File details

Details for the file aegis_admin-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aegis_admin-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for aegis_admin-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bf9de493dfc39a41f4d0f09e7569aeb05d0b39f182094af41f22cf1297c8c880
MD5 66092cb1af47c6e511ea0bbbb06c41c9
BLAKE2b-256 dd19c9ba21f91ba7a8d465ab6bae7e1446f1b8b4f670c51a3664f72cb3ee01bf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page