Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ldt_nexus-1.0.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ldt_nexus-1.0.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file ldt_nexus-1.0.0.tar.gz.

File metadata

  • Download URL: ldt_nexus-1.0.0.tar.gz
  • Upload date:
  • Size: 8.5 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

Hashes for ldt_nexus-1.0.0.tar.gz
Algorithm Hash digest
SHA256 290841f33ae2b77e18c1aeccc8d019b3a677ca01fc84161c4b2370cea184b765
MD5 61bcbf02b1b7388cce8b311e22acc2d0
BLAKE2b-256 86ab4b2baf39d19244afc957f93d97860f335269609a106d2de05a1d7981e491

See more details on using hashes here.

File details

Details for the file ldt_nexus-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ldt_nexus-1.0.0-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

Hashes for ldt_nexus-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c80ca5343bc90332e7eddd2b9c35ff007461ef4b4d26acf446c3d1ef4efbeded
MD5 d89837d628a6954f2fee9f71a0f1651c
BLAKE2b-256 655438d8a7a07d86d453c41b8e0cefb27106289ac57acec1340eda152303ac89

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page