Skip to main content

lexigram-admin

Modern Python-first admin framework for Lexigram — HTMX, CRUD, dashboards, and extensions.


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

uv add lexigram-admin
# Optional extras
uv add "lexigram-admin[auth,saml,ldap,oauth2,export]"

Quick Start

from lexigram import Application
from lexigram.di.module import Module, module
from 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

Zero-config usage: Call AdminModule.configure() with no arguments to use defaults.

Option 1 — YAML file

# application.yaml
admin:
  prefix: /admin
  title: "My App Admin"
  features:
    audit_logging: true

Option 2 — Profiles + Environment Variables (recommended)

export LEX_ADMIN__ENABLED=true
export LEX_ADMIN__TITLE="Production Admin"

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

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

Method Description
AdminModule.configure(...) Configure with explicit config, auth provider, resources, or controllers
AdminModule.stub() Minimal config for testing

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-auth RBAC; 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

Contributor System

lexigram-admin features a plugin/contributor system that lets third-party packages extend the admin dashboard without modifying the host application.

Any package can become a contributor by:

  1. Subclassing BaseAdminContributor from lexigram-contracts
  2. Registering it via the lexigram.admin.contributors entry point group
  3. Implementing methods like get_resources(), get_dashboard_widgets(), get_navigation_items(), get_management_pages(), get_settings_panels(), get_routes(), and get_actions()

Contributions are automatically namespaced by the contributor's package_source to prevent name collisions. Collision behavior is configurable via AdminConfig.contributor_collision_mode ("warn" | "error").

For a complete walkthrough, see the Extension Developer Guide.

Example (plugin pyproject.toml)

[project.entry-points."lexigram.admin.contributors"]
my_plugin = "my_plugin.contributor:MyContributor"

Testing

async with Application.boot(modules=[AdminModule.stub()]) as app:
    # your test code
    ...

Examples

Key Source Files

File What it contains

Operations

Production deployment guidance, rollback steps, audit-log backup/restore, session revocation, contributor triage, and metrics names live in OPERATOR_RUNBOOK.md.

| 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 | | src/lexigram/admin/contributors/ | Contributor registry, resource collection |

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

lexigram_admin-0.1.3005-py3-none-any.whl (803.8 kB view details)

Uploaded Python 3

File details

Details for the file lexigram_admin-0.1.3005-py3-none-any.whl.

File metadata

File hashes

Hashes for lexigram_admin-0.1.3005-py3-none-any.whl
Algorithm Hash digest
SHA256 bf2a97c7b522f46841705f6fa55b9adf69a924b94badedb8a06e6b84bc2bc38b
MD5 ab160642aea0a66d20dc281253e77f06
BLAKE2b-256 fb51903c662949ea9ef39f10af04211ca61cfb4fdfe8d4c5396712d2f70e27c7

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.5010

1 file

0.1.5004

1 file

0.1.5002

2 files

0.1.5001

2 files

0.1.3010

1 file

0.1.3009

2 files

0.1.3007

1 file

0.1.3006

1 file

This release

0.1.3005 This release

1 file

0.1.4

2 files

0.1.2

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page