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.5001.tar.gz (3.4 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.5001-py3-none-any.whl (1.0 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for lexigram_admin-0.1.5001.tar.gz
Algorithm Hash digest
SHA256 0398866e5b4e26ae96dba72cc959fe9a3b1af478f7f0ad884763fe0cf1080cd7
MD5 5bdd26803ab1215a00352b6318a2776c
BLAKE2b-256 d071cda13bff599b7867e6fdb0f51d6b7ab7d15566dfab33c2387b359480c436

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for lexigram_admin-0.1.5001-py3-none-any.whl
Algorithm Hash digest
SHA256 8e8f55adae934d514a9b55e4d7ea44770f34acd5c02864c268c6ffb08e86844a
MD5 d3a191c157eb535d53c4a38540762f1c
BLAKE2b-256 d40e507b891d0bdf87727e08cb5d42ee95dd97a7c80b7425749fab872b7d8f21

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

This release

0.1.5001 This release

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

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