appСборка
create_app(settings) — ленивая обёртка: FastAPI, посредники, жизненный цикл и точки монтирования приходят с keepup-http.
Каркас администрирования для FastAPI
Вы передаёте настройки — keepup возвращает приложение, в котором уже соединены панель управления, плагинная среда, пользователи и роли, слой базы данных, аудит, метрики и согласование реплик.
pip install keepup-admin
pip install "keepup-admin[panel,postgres]"
Ставится как keepup-admin, импортируется как keepup.
База — конструктор: ядро, каталог плагинов, реестр служб, жизненный цикл
и шов транспорта, без единой чужой библиотеки, даже FastAPI. Возможности
ставятся extras: полная панель — keepup-admin[panel,postgres].
import os
from keepup import KeepupSettings, create_app
PLUGINS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "plugins")
app = create_app(KeepupSettings(
title="Your product",
plugins_dir=PLUGINS,
static_mounts=(), # У приложения нет своей статики: оболочка панели приходит с keepup-http.
))
$ SECRET_KEY=… uvicorn main:app → панель на /selfcareЧто внутри
Восемь частей, которые обычно собирают вокруг FastAPI руками, — набором дистрибутивов при одной точке настройки. База не тянет ни одной чужой библиотеки, даже FastAPI: каждая возможность объявляет свои. Полная панель — pip install "keepup-admin[panel,postgres]".
create_app(settings) — ленивая обёртка: FastAPI, посредники, жизненный цикл и точки монтирования приходят с keepup-http.
Возможности подключаются плагинами; маршруты — данные, а не декораторы.
Оболочка /selfcare и разделы — keepup-http, темы — keepup-ui, каталог разделов и выдачи ролям — keepup-modules; восемь разделов из коробки.
Локальные учётные записи, роли, сессии панели, вход через внешний OIDC-провайдер.
keepup-db: SQLAlchemy с пулом; таблица объявляется один раз для PostgreSQL и SQLite, без миграций.
keepup-cluster: распределённые блокировки, шина сообщений между процессами, реестр кластера.
keepup-tasks: один планировщик на процесс; задачи видны в панели и запускаются оттуда вручную.
keepup-audit, keepup-metrics, keepup-log-shipping: аудит входящих запросов, журнал событий, метрики Prometheus, отправка логов.
Как устроено
Всё, чего каркас знать не может, приходит в KeepupSettings: имя и версия,
куда отправлять логи, какие поля запроса секретны, каким должен быть пароль,
какие страницы закрыты, каким источникам можно читать ответы.
Публичное объявлено явно: имена в __all__ — это контракт, и тест держит
пакет в его рамках. Всё остальное внутреннее и может измениться без предупреждения.
from keepup.plugins.base import BasePlugin
class HelloPlugin(BasePlugin):
def __init__(self, config=None):
super().__init__("hello", "Hello", config or {})
async def initialize(self) -> bool:
return True
def get_handlers(self):
return {}
def get_api_routes(self):
return [{"path": "/api/hello", "methods": ["GET"],
"handler": self.hello}]
async def hello(self, current_user: dict, **kwargs):
return {"hello": current_user["username"]}
Закрыто по умолчанию
SECRET_KEY приложение не стартует — ключа подписи в исходниках нет./metrics — только с учётными данными.Дальше
Начало работы, настройки, плагины, таблицы, реплики, панель и безопасность.
Плагин с маршрутами, таблица, блокировка, события, сокет, вход через провайдер.
Репозиторий на GitHub: код, README, набор тестов.
Дистрибутив keepup-admin в PyPI: метаданные и файлы.
Что каждая версия добавила, изменила и убрала.
Сообщить о том, что не работает, или попросить то, чего не хватает.