38 lines
909 B
Python
38 lines
909 B
Python
"""
|
|
JSON file I/O utilities.
|
|
|
|
Provides read_json and write_json as the single source of truth
|
|
for JSON file operations across all Trellis scripts.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
def read_json(path: Path) -> dict | None:
|
|
"""Read and parse a JSON file.
|
|
|
|
Returns None if the file doesn't exist, is invalid JSON, or can't be read.
|
|
"""
|
|
try:
|
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
except (FileNotFoundError, json.JSONDecodeError, OSError):
|
|
return None
|
|
|
|
|
|
def write_json(path: Path, data: dict) -> bool:
|
|
"""Write dict to JSON file with pretty formatting.
|
|
|
|
Returns True on success, False on error.
|
|
"""
|
|
try:
|
|
path.write_text(
|
|
json.dumps(data, indent=2, ensure_ascii=False),
|
|
encoding="utf-8",
|
|
)
|
|
return True
|
|
except (OSError, IOError):
|
|
return False
|