Reactive data-tree management with pathlib-hybrid interface
Project description
📂 LDT Nexus
LDT Nexus — это легковесный фреймворк для управления конфигурациями и состоянием приложения. Он превращает обычные JSON/YAML файлы в реактивные деревья данных с интерфейсом pathlib.
✨ Основные возможности
- Dot-Notation: Забудьте о
data["ui"]["theme"]["color"]. Используйтеconfig.value("ui.theme.color"). - NexusFields: Описывайте настройки декларативно. Ваши переменные сами знают, как сохраняться и уведомлять об изменениях.
- Type-Safe: Автоматическое восстановление типов (
Path,datetime,QColorи ваши собственные классы). - Zero-Dependency Core: Минимальный размер. Внешние драйверы (YAML, TOML) подключаются только при необходимости.
📦 Установка
# Базовая версия (только JSON)
uv add ldt-nexus
# Полная версия (YAML, TOML, JSON5)
uv add ldt-nexus --extra all
🚀 Подробные примеры
1. Декларативная модель (Реактивность)
Самый удобный способ работы — создание класса-модели.
from ldt import NexusStore, NexusField, JsonDriver
class AppSettings(NexusStore):
# Поля с дефолтными значениями
theme = NexusField("ui.theme", default="dark")
volume = NexusField("audio.max_volume", default=80)
last_file = NexusField("system.history.last_opened")
# Инициализация
cfg = AppSettings("config.json", driver=JsonDriver())
# Подписка на изменения конкретного поля
AppSettings.theme.connect(cfg, lambda val: print(f"Тема изменена на: {val}"))
# Автоматическая запись и уведомление
cfg.theme = "light" # В консоли: "Тема изменена на: light"
cfg.sync() # Сохранение на диск
2. Работа с группами (стиль QSettings)
Если вы переходите с Qt, вам будет привычен этот синтаксис:
with cfg.group_context("database"):
cfg.setValue("host", "localhost")
cfg.setValue("port", 5432)
# Значение сохранится по пути "database.host"
print(cfg.value("database.host"))
3. Кастомные сериализаторы
Научите Nexus работать с вашими классами.
from ldt import LDT
from dataclasses import dataclass
@dataclass
class User:
name: str
role: str
@LDT.serializer(User)
def ser_user(u: User):
return {"name": u.name, "role": u.role}
@LDT.deserializer(User)
def deser_user(data):
return User(name=data["name"], role=data["role"])
# Теперь Nexus понимает этот тип данных
cfg.setValue("current_user", User("Admin", "root"))
user = cfg.value("current_user", type_cls=User)
4. Блокировка сигналов (Bulk Update)
Чтобы не спамить уведомлениями при массовой загрузке данных:
with cfg.blockSignals():
for i in range(100):
cfg.setValue(f"item_{i}", i)
# Сигналы сработают только после выхода из блока, если это необходимо
🛠 Выбор драйвера (Optional Dependencies)
LDT Nexus поддерживает разные форматы через систему драйверов:
from ldt.io.drivers import JsonDriver, YamlDriver, TomlDriver
# Для YAML (требуется ldt-nexus[yaml])
cfg_yaml = NexusStore("config.yaml", driver=YamlDriver())
# Для TOML (требуется ldt-nexus[toml])
cfg_toml = NexusStore("config.toml", driver=TomlDriver())
🧪 Тестирование вашего проекта
Благодаря PathProtocol, вы можете легко тестировать свои конфиги, используя tmp_path в pytest:
def test_settings(tmp_path):
path = tmp_path / "test.json"
cfg = AppSettings(path, driver=JsonDriver())
cfg.theme = "blue"
cfg.sync()
assert path.exists()
🏗 Структура проекта
ldt.core: Ядро обработки деревьев данных.ldt.fields: Реактивные дескрипторы.ldt.io.store: Основной интерфейс хранилища.ldt.io.drivers: Сменные модули сериализации.
⚖️ Лицензия
MIT
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 ldt_nexus-1.0.1.tar.gz.
File metadata
- Download URL: ldt_nexus-1.0.1.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57cec01d8eacbce8eea53ed376e9775f6242a30993de4166b109a6f2815adb8f
|
|
| MD5 |
ff50b4453667c808b2e9798840cdfa9f
|
|
| BLAKE2b-256 |
8181464677e54fb272a5fb1dbefb9706a1c111d07f7118c5292d8121b922ce10
|
File details
Details for the file ldt_nexus-1.0.1-py3-none-any.whl.
File metadata
- Download URL: ldt_nexus-1.0.1-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f85495de5953b6824512f73cbf536a0b97485d70e11a502e2eb6b34b5d78f7d2
|
|
| MD5 |
3de1c009c60e4a2668e9488121ef8b86
|
|
| BLAKE2b-256 |
671933593ca9bf11d725a42b0d10237b235ccb89070878cbcda2d1fd7c0c7487
|