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 pass Resource classes via the resources= argument.

Install

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

Quick Start

from lexigram import Application
from lexigram.admin import AdminModule
from lexigram.admin.config import AdminConfig
from lexigram.admin.resources.users import UserResource
from lexigram.sql import DatabaseModule
from lexigram.features import FeatureFlagsModule


async def main() -> None:
    async with Application.boot(
        modules=[
            DatabaseModule.configure(config="sqlite:///admin.db"),
            FeatureFlagsModule.configure(),
            AdminModule.configure(
                config=AdminConfig(title="My App Admin"),
                resources=[UserResource],
            ),
        ]
    ) as app:
        # ... admin panel served under /admin ...
        ...


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

Resources are Resource subclasses (e.g. UserResource) passed to AdminModule.configure(resources=[...]) — there is no global admin-site registry in lexigram-admin. The admin panel also requires a registered DatabaseProviderProtocol (here via DatabaseModule from lexigram-sql) and FlagManagerProtocol (via FeatureFlagsModule).

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 pagesBaseAdminContributor.get_management_pages() and get_routes() for bespoke views

Testing

from lexigram.admin import AdminModule
from lexigram.sql import DatabaseModule
from lexigram.features import FeatureFlagsModule

async with Application.boot(
    modules=[
        DatabaseModule.configure(config="sqlite:///test.db"),
        FeatureFlagsModule.configure(),
        AdminModule.stub(),
    ]
) as app:
    # your test code
    ...

AdminModule.stub() still requires a DatabaseProviderProtocol and a FlagManagerProtocol binding (as in the Quick Start); it simply registers no resources or contributors.

Key Source Files

File What it contains
src/lexigram/admin/module.py AdminModule definition with factory methods
src/lexigram/admin/di/bundle_provider.py AdminProvider wiring
src/lexigram/admin/config.py AdminConfig and all config sub-models
src/lexigram/admin/contributors/ Contributor registry, resource collection

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"

Operations

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

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.4.tar.gz (3.6 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.4-py3-none-any.whl (989.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lexigram_admin-0.1.4.tar.gz
Algorithm Hash digest
SHA256 918158e4c4b88829e016df1cd3aca83df2048b97241a6d416852079af56e811e
MD5 97afe039d4cd73354f69caa951dccca0
BLAKE2b-256 e5d4606812570713f044c6de6acf4bb69f16e54b8c45e8ddd9524e673e97930e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for lexigram_admin-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 26024675f483b27fddf77b89fd4117e9edaf9604d4ad55ef27c281d37daee076
MD5 b6da2490dc97497e167fa052e298ca6a
BLAKE2b-256 54e1df47c007e538f652aa092a4de1d62ce5943cf677f412beffa7e1325fa285

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

0.1.3005

1 file

This release

0.1.4 This release

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