Admin (lexigram-admin)
Modern Python-first admin framework for Lexigram — HTMX, CRUD, dashboards, and extensions.
Overview
Section titled “Overview”Auto-generated admin panel for the Lexigram Framework. Provides CRUD interfaces, bulk actions, role-based access, and audit logging for any domain model — with zero frontend code required.
Built on lexigram-ui for responsive UI components and integrates with lexigram-auth
for RBAC permission enforcement. Configure via AdminModule.configure() and register
resources with the admin site.
Install
Section titled “Install”uv add lexigram-admin# Optional extrasuv add "lexigram-admin[auth,saml,ldap,oauth2,export]"Quick Start
Section titled “Quick Start”from lexigram import Applicationfrom lexigram.di.module import Module, modulefrom lexigram.admin import AdminModule, ModelAdmin, admin_site
@admin_site.register(Product)class ProductAdmin(ModelAdmin): list_display = ["id", "name", "price", "is_active"] list_filter = ["is_active", "category"] search_fields = ["name", "sku"]
@module(imports=[AdminModule.configure()])class AppModule(Module): pass
app = Application(modules=[AppModule])if __name__ == "__main__": app.run()Configuration
Section titled “Configuration”Zero-config usage: Call
AdminModule.configure()with no arguments to use defaults.
Option 1 — YAML file
Section titled “Option 1 — YAML file”admin: prefix: /admin title: "My App Admin" features: audit_logging: trueOption 2 — Profiles + Environment Variables (recommended)
Section titled “Option 2 — Profiles + Environment Variables (recommended)”export LEX_ADMIN__ENABLED=trueexport LEX_ADMIN__TITLE="Production Admin"Option 3 — Python
Section titled “Option 3 — Python”from lexigram.admin.config import AdminConfig
config = AdminConfig( prefix="/admin", title="My App Admin", features=AdminFeaturesConfig(audit_logging=True),)AdminModule.configure(config)Config reference
Section titled “Config reference”| Field | Default | Env var | Description |
|---|---|---|---|
prefix | /admin | LEX_ADMIN__PREFIX | URL prefix for all admin routes |
title | Lexigram Admin | LEX_ADMIN__TITLE | Panel title shown in browser and header |
auth.session_secret | change-me-in-production | LEX_ADMIN__AUTH__SESSION_SECRET | Secret for signing session cookies (required in production) |
auth.session_lifetime | 86400 | LEX_ADMIN__AUTH__SESSION_LIFETIME | Session validity in seconds (default: 24h) |
auth.idle_timeout | 3600 | LEX_ADMIN__AUTH__IDLE_TIMEOUT | Idle session expiry in seconds |
features.audit_logging | true | LEX_ADMIN__FEATURES__AUDIT_LOGGING | Log every write action with user and diff |
resource_defaults.per_page | 20 | LEX_ADMIN__RESOURCE_DEFAULTS__PER_PAGE | Default rows per page |
ui.theme | system | LEX_ADMIN__UI__THEME | UI colour scheme (light, dark, or system) |
Module Factory Methods
Section titled “Module Factory Methods”| Method | Description |
|---|---|
AdminModule.configure(...) | Configure with explicit config, auth provider, resources, or controllers |
AdminModule.stub() | Minimal config for testing |
Key Features
Section titled “Key Features”- Auto CRUD — List, detail, create, edit, delete with zero boilerplate
- Smart list — Sortable columns, inline filters, pagination, search bar
- Bulk actions — Multi-select operations with progress and error summaries
- Row actions — Per-row buttons for custom single-object operations
- Auth integration — Plugs into
lexigram-authRBAC; per-model permission guards - Audit log — Every write action logged with user, timestamp, diff
- Change history — Per-object change history with diff viewer
- Password policy — Configurable complexity rules for admin users
- Custom pages —
@admin_site.page(path="/reports")for bespoke views
Testing
Section titled “Testing”async with Application.boot(modules=[AdminModule.stub()]) as app: # your test code ...Key Source Files
Section titled “Key Source Files”| File | What it contains |
|---|---|
src/lexigram/admin/module.py | AdminModule definition with factory methods |
src/lexigram/admin/di/bundle_provider.py | AdminBundleProvider wiring |
src/lexigram/admin/config.py | AdminConfig and all config sub-models |