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.5002.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.5002-py3-none-any.whl (1.0 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lexigram_admin-0.1.5002.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.5002.tar.gz
Algorithm Hash digest
SHA256 8a963abb37817e3154193fc5d7c63979b2a205353e133045af0ba79a6f248809
MD5 34ca73fe6e2ce1eb8bef104f85af87af
BLAKE2b-256 388d7ea897f0a1e6c866aa814da9d5cacf92b23922b726143536286d99b20bf0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for lexigram_admin-0.1.5002-py3-none-any.whl
Algorithm Hash digest
SHA256 238e91e0dc659568d8406eef7140d2adace7eb8bc91fd43c053a6bff45e7c362
MD5 723fb03aedbfc2a5c27e00cde73c8f81
BLAKE2b-256 25cee770be25bc6d9161d0ea4197384c357cfcd409344607e73c61d9ea9aae22

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.5010

1 file

0.1.5004

1 file

This release

0.1.5002 This release

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

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