Skip to main content

Json-admin

Библиотека с реализацией простого интерфейса для управления .json-файлом с настройками приложения.

Установка

uv add json-admin
poetry add json-admin
pip install json-admin

Быстрый старт

from litestar import Litestar
from pydantic import BaseModel, Field

from jsonadmin import Admin, HtmlPage, JsonPage


class AppSettings(BaseModel):
    """Настройки приложения."""

    debug: bool = Field(default=False, description="Включает debug-режим")
    retries: int = Field(default=3, ge=0, description="Количество повторных попыток")


class FeatureFlags(BaseModel):
    """Настройки флагов."""

    use_cache: bool = Field(default=True, description="Включает кеширование")
    beta_mode: bool = Field(default=False, description="Включает beta-режим")


app = Litestar(route_handlers=[])
admin = Admin(
    app=app,
    passwd="super-strong-password",
    title="My App Admin",
    index="index.html",
    login="login.html",
    pages=[
        HtmlPage(
            slug="info",
            title="Информация",
            icon="fa-solid fa-circle-info",
            content="""
            <h2>Welcome</h2>
            <p>Эта вкладка только для чтения и показывает HTML-блок.</p>
            """,
        ),
        JsonPage(
            slug="settings",
            title="Настройки",
            file_path="data/app_settings.json",
            model=AppSettings,
            icon="fa-solid fa-gear",
            sync_mode="migrate",
        ),
        JsonPage(
            slug="features",
            title="Флаги",
            file_path="data/feature_flags.json",
            model=FeatureFlags,
            icon="fa-solid fa-flag",
            sync_mode="migrate",
        ),
    ],
    base_url="/",
)

После запуска:

  • GET / покажет форму входа по паролю.
  • после входа доступны вкладки-страницы с JSON-редактором.
  • HtmlPage — read-only вкладка с HTML-блоком. content может быть: встроенной строкой HTML, путём к .html файлу или Callable[[], str].
  • кнопка Сохранить валидирует данные через обязательную Pydantic-модель и сохраняет JSON в файл.
  • sync_mode="create" создаст JSON-файл при старте, если файла нет.
  • sync_mode="migrate" создаст файл при отсутствии или прогонит существующий JSON через модель (заполнит дефолты и уберет лишние поля, если модель это позволяет).
  • файл создается/мигрируется только если модель может быть успешно валидирована; иначе будет ошибка.
  • можно переопределить интерфейс через Jinja-шаблоны в jsonadmin/html/ (по умолчанию) или через templates_dir=....
  • для вкладок можно передать icon с классом Font Awesome, например fa-solid fa-gear.

Автообновляемый провайдер JSON-конфига

Если в приложении нужен «живой» конфиг, можно использовать JsonProvider и JsonProxy:

from pydantic import BaseModel, Field

from jsonadmin import JsonProvider, JsonProxy, build_json_model_loader


class AppSettings(BaseModel):
    debug: bool = Field(default=False)
    retries: int = Field(default=3, ge=0)


settings_provider = JsonProvider(
    loader=build_json_model_loader(
        model=AppSettings,
        file_path="data/app_settings.json",
        create_if_missing=True,
    ),
    refresh_interval_sec=5,
)
settings: AppSettings = JsonProxy(settings_provider)  # type: ignore[assignment]

# Использование:
if settings.debug:
    print(settings.retries)

JsonProvider.value вернет кэш и сам перечитает файл только при истекшем интервале. JsonProxy делает доступ к полям модели прозрачным (settings.debug, settings.retries и т.д.).

Как с этим работать на практике:

  • создайте loader через build_json_model_loader(...);
  • включите create_if_missing=True, если файл нужно создавать автоматически из дефолтов модели;
  • оберните loader в JsonProvider и задайте refresh_interval_sec;
  • используйте JsonProxy, чтобы читать поля как у обычной Pydantic-модели;
  • для немедленного обновления можно вызвать settings_provider.reload() или settings.reload().

Готовый runnable-пример есть в examples/provider_demo.py:

uv run python examples/provider_demo.py

Скрипт показывает сценарий «фонового» обновления: один таск читает прокси, другой изменяет JSON-файл.

Пример интерфейса

Ниже — короткий визуальный пример того, как выглядит админка:

  • Страница входа: Страница входа

  • Read-only HTML-вкладка (HtmlPage): HTML-вкладка

  • Редактирование JSON (вкладка 1): Редактирование JSON 1

  • Редактирование JSON (вкладка 2): Редактирование JSON 2

Metadata

Release files for json-admin 1.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for json-admin 1.3.1
File Size Uploaded
json_admin-1.3.1.tar.gz 27.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for json-admin 1.3.1
File Interpreter ABI Platform
json_admin-1.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 57.9 kB

Release files / json_admin-1.3.1.tar.gz

Download URL json_admin-1.3.1.tar.gz
Size 27.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1d44c16ea901a81af2ce56749f8230886f94cdaa9af12d0d8a541b00a551885f
BLAKE2b-256 checksum
How to use checksums
6b7f003f3e72c2b0876b3c4a703433d3bf4fad34715ba7af7e1d3fcf01e28f70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.

Transparency log

Release files / json_admin-1.3.1-py3-none-any.whl

Download URL json_admin-1.3.1-py3-none-any.whl
Size 30.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
164fd69b7cef557780eb41a02209b3412324971f98760b31bbd28a343778d162
BLAKE2b-256 checksum
How to use checksums
6ae4462bf7c6ce7b26b0bdd1f5f1a7f9400634856cf7d43d95258ccb858e77b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.3.1 This release

2 release files

1.3.0

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.1.0

2 release files

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