mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 10:51:36 -04:00
Inventories are a config-only MultiFileConfig (config/inventory/<slug>.yaml) and were not reachable by the admin config Restore UI, so there was no way to re-import a hand-edited/copied-in file or restore an inventory from its daily backup. Backend: - MultiFileConfig gains generic helpers: get_backup_dates(slug)/_get_backup_file (surface the daily config/backup/<subdir>/<slug>-DATE.yaml files) and reimport() (rebuild the in-memory store from disk; picks up hand-edits and copied-in files, drops files deleted on disk). backup_date is constrained to YYYYMMDD so it cannot traverse out of the backup directory. - InventoriesConfig.preview_restore/apply_restore: overwrite replaces the whole inventory; merge unions items by id (keeps current fields and existing items). The pre-restore state is backed up automatically, so a restore is undoable. - API: POST /inventory/reimport, GET /inventory/<slug>/backups, POST /inventory/<slug>/restore/preview, POST /inventory/<slug>/restore. Frontend: - New InventoryImportModal (opened from a Restore button in the Inventory toolbar): Re-import from disk, plus a dated-backup table with per-row Merge/Overwrite that previews the change before applying. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
14 lines
229 B
Python
14 lines
229 B
Python
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
|
|
@dataclass
|
|
class InventoryPostRequest:
|
|
name: str
|
|
type: Optional[str] = 'food'
|
|
|
|
|
|
@dataclass
|
|
class InventoryRestoreRequest:
|
|
backup_date: str
|
|
mode: str
|