项目文件夹

文件
wehub-resource-sync 2c632336aa
CI / Viewer CI (push) Successful in 13m37s
CI / Core CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:38 +08:00

38 行
1.2 KiB
Python

from __future__ import annotations
import json
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any
from storage.layout import StorageLayout
@dataclass(slots=True)
class StorageRepo:
root: Path
data_root: Path | None = None
layout: StorageLayout = field(init=False)
def __post_init__(self) -> None:
self.root = self.root.resolve()
if self.data_root is not None:
self.data_root = self.data_root.expanduser().resolve()
self.layout = StorageLayout(self.root, self.data_root)
def ensure_layout(self) -> None:
self.layout.ensure_base_dirs()
def read_json(self, path: Path, *, default: Any = None) -> Any:
if not path.exists():
return default
return json.loads(path.read_text(encoding="utf-8"))
def write_json(self, path: Path, data: Any) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8")
def write_text(self, path: Path, text: str) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(text, encoding="utf-8")