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 Distribution

lexigram_admin-0.1.3009.tar.gz (3.1 MB view details)

Uploaded Source

Built Distribution

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

lexigram_admin-0.1.3009-py3-none-any.whl (739.6 kB view details)

Uploaded Python 3

File details

Details for the file lexigram_admin-0.1.3009.tar.gz.

File metadata

  • Download URL: lexigram_admin-0.1.3009.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for lexigram_admin-0.1.3009.tar.gz
Algorithm Hash digest
SHA256 5e291e42b6d88d13d5dc1dfae22c6838348426ac638d1280ea21f7525e1db0d1
MD5 afd1bb4dc5a11175fd1ee97b1bed8282
BLAKE2b-256 72aae632bba7a85359d42170715e46b1d6e2fee583bb5979c732bbd803e8da59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for lexigram_admin-0.1.3009-py3-none-any.whl
Algorithm Hash digest
SHA256 9ddcf6bb8f7fa3ef4ac1c7ab18b2f7c3946344ad0e48fc15b0ce955e23d4c2e9
MD5 a9ce5f4b027f326c3b6814528128ce09
BLAKE2b-256 2a6aaca3ec5964f4faffa6888ac31f52ecbfafd6e431e33ebfe654586e0c1703

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

This release

0.1.3009 This release

2 files

0.1.3007

1 file

0.1.3006

1 file

0.1.3005

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