Десктопное приложение на PySide6. Вся база — один JSON-документ, зашифрованный AES-256-GCM под паролем (ключ через scrypt), лежит в data/vault.fmdb и раз в час уезжает в этот репозиторий. Основное: - партии с дедлайном возврата себестоимости пекарне, FIFO-разнос продаж по партиям и прогресс покрытия к сроку; - типы выбытия: розница, другу по себестоимости, съел сам, подарок, списание — съеденное вычитается из прибыли, за него платить всё равно; - долги контрагентов с частичными оплатами; - номенклатура с историей изменения цен; - журнал изменений внутри базы: git хранит непрозрачные снимки, поэтому настоящая история ведётся здесь. Синхронизация коммитит только путь базы и схлопывает часовые пуши в один коммит на день через amend + force-with-lease. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""Где лежат данные.
|
||
|
||
Собранный exe кладётся в корень клона репозитория, а база — в data/ рядом
|
||
с ним. При запуске из исходников корнем считается сама папка проекта, поэтому
|
||
разработка и собранное приложение работают с одним и тем же файлом.
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
VAULT_NAME = "vault.fmdb"
|
||
DATA_DIR_NAME = "data"
|
||
|
||
|
||
def app_root() -> Path:
|
||
if getattr(sys, "frozen", False):
|
||
return Path(sys.executable).resolve().parent
|
||
return Path(__file__).resolve().parent.parent
|
||
|
||
|
||
def data_dir() -> Path:
|
||
return app_root() / DATA_DIR_NAME
|
||
|
||
|
||
def vault_path() -> Path:
|
||
return data_dir() / VAULT_NAME
|
||
|
||
|
||
def vault_rel_posix() -> str:
|
||
"""Путь базы для git — всегда со слешами и относительно корня репозитория."""
|
||
return f"{DATA_DIR_NAME}/{VAULT_NAME}"
|
||
|
||
|
||
def backup_path() -> Path:
|
||
return data_dir() / f"{VAULT_NAME}.bak"
|
||
|
||
|
||
def remote_copy_path() -> Path:
|
||
"""Куда складывается удалённая версия базы при расхождении веток."""
|
||
return data_dir() / "vault.remote.fmdb"
|