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-0.1.2.tar.gz (8.3 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-0.1.2-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ldt_nexus-0.1.2.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ldt_nexus-0.1.2.tar.gz
Algorithm Hash digest
SHA256 fa330464aed6837dfea5df6948667e5bac4ce25176be02de5a1cbd1a107f8e37
MD5 a488a74638646ca72d85ba6d3b1738c5
BLAKE2b-256 666efc6e1d065c5efc51924b4f540804bfd486c2e22f9673ec2ba80705bf5e30

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ldt_nexus-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ldt_nexus-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f090114df01d665115b98725a1de475afae04fa103d2031c52cd91eb6e420c56
MD5 9d6270c844b1f9ac2ebdf2f4be6f1450
BLAKE2b-256 d26d7a20703112fdfe30d7c56bbf7d22dbbb03ccb3190ca6b74f66855256bdb4

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