Opinionated decorators that turn callables into CLI commands with structured logging.
Project description
Data Platform Toolkit
Набор инструментов, которые помогают:
- превращать функции в CLI команды c помощью
argparse; - автоматически добавлять структурированные JSON-логи вокруг вызова;
- переиспользовать один и тот же стек в разных проектах с минимальными зависимостями.
Установка
pip install data-platform-toolkit
Быстрый старт
from decorators import cli, configure_toolkit, get_logger
configure_toolkit(logger_structured_messages=True) # один раз на старте приложения
logger = get_logger() # использует настройки из configure_toolkit
@cli.command()
def greet(name: str, excited: bool = False):
"""Простое приветствие."""
message = f"Hello, {name}"
return message.upper() if excited else message
if __name__ == "__main__":
cli.run()
$ python app.py greet Artem --excited
HELLO, ARTEM
Каждый запуск создаёт три лог-события (start, success, error) в JSON-формате; адаптер добавляет timestamp и invocation_id:
{"event": "start", "function": "greet", "call": {"args": ["Artem"], "kwargs": {"excited": true}}, "timestamp": "<ts>", "invocation_id": "<id>"}
{"event": "success", "function": "greet", "duration": 0.000021, "message": "HELLO, ARTEM", "timestamp": "<ts>", "invocation_id": "<id>"}
Примеры: позиционные и опции
Правила формирования CLI-аргументов берутся из CLIRegistry._add_argument:
- Параметры без значения по умолчанию добавляются как позиционные.
- Параметры со значением по умолчанию добавляются как именованные опции
--name.
Это влияет на способ вызова команды:
- Позиционный аргумент (без дефолта)
from decorators import cli
@cli.command()
def hello(name: str) -> str:
return f"Hello, {name}!"
if __name__ == "__main__":
cli.run()
Запуск:
python app.py hello artem
- Именованная опция (с дефолтом)
from decorators import cli
@cli.command()
def hello(name: str = "World") -> str:
return f"Hello, {name}!"
if __name__ == "__main__":
cli.run()
Запуски:
# Использовать дефолтное значение
python app.py hello
# Явно передать значение через опцию
python app.py hello --name artem
- Булевы флаги (
--flag/--no-flag)
from decorators import cli
@cli.command()
def toggle(verbose: bool = False) -> bool:
return verbose
if __name__ == "__main__":
cli.run()
Запуски:
python app.py toggle --verbose # → True
python app.py toggle --no-verbose # → False
Дополнительные возможности
CLIRegistry()— создаёт собственный реестр команд (удобно для библиотек).@cli.command(log=False)— отключает логирование, если оно не требуется.@structured— декоратор для обычных функций, которым не нужен CLI, но нужны структурированные логи.
Dry-run (стандартный тестовый режим)
Каждая CLI‑команда поддерживает флаг --dry-run, который выводит структурированный JSON‑превью вызова и пропускает выполнение функции. Чтобы реестр распознал флаг как глобальный, его нужно указывать до имени команды. Это удобно для тестирования интеграций в проектах, импортирующих библиотеку.
$ python app.py --dry-run greet Artem --excited
{"event": "dry_run", "function": "greet", "call": {"kwargs": {"name": "Artem", "excited": true}}}
Также поддерживается глобальный вызов без указания команды:
$ python app.py --dry-run
{"event": "dry_run", "function": null, "available": ["greet", "toggle", "..."]}
Флаг доступен для всех команд автоматически и не влияет на сигнатуру функций.
Ограничения
- Поддерживаются только позиционные и именованные аргументы (без
*argsи**kwargs). - Для булевых параметров автоматически добавляются флаги
--flag/--no-flag. - Типы аргументов выводятся из аннотаций или значений по умолчанию и ограничены
str,int,float,bool.
Лицензия
MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file data_platform_toolkit-0.6.0.tar.gz.
File metadata
- Download URL: data_platform_toolkit-0.6.0.tar.gz
- Upload date:
- Size: 12.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77533bde856447bc49b8100f28d9e301d8475b1dd64e506efcffbc340ab36ce0
|
|
| MD5 |
ccafc9dd9b2be3cb3f0f5af88160fb13
|
|
| BLAKE2b-256 |
b9c759f28ae9a9c52fffefb1a7a54a51272b2604dc5bc83793993d836a58c879
|
File details
Details for the file data_platform_toolkit-0.6.0-py3-none-any.whl.
File metadata
- Download URL: data_platform_toolkit-0.6.0-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ae4495f4f90d140a519d0fa4434cb59b1aac7193c0bc8ba81ee41dd39703f4e
|
|
| MD5 |
35dc8b19d284c54f4488c054f5255988
|
|
| BLAKE2b-256 |
bd994088e2398e80194ce4bd8838f5a7359c96d4fadc6da84cbb380d8be35dbe
|