51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""Laufzeitdaten (letzter Spielername).
|
||
|
||
Alles, was zur Laufzeit geschrieben wird, landet in ``runtime/`` – dieser
|
||
Ordner ist in ``.gitignore`` eingetragen. Über die Umgebungsvariable
|
||
``HAG_RUNTIME_DIR`` lässt sich der Ort umbiegen (praktisch für Tests).
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
import os
|
||
from pathlib import Path
|
||
|
||
from . import config
|
||
|
||
LAST_PLAYER_FILE = "last_player.json"
|
||
|
||
|
||
def runtime_dir() -> Path:
|
||
"""Verzeichnis für Laufzeitdaten; wird bei Bedarf angelegt."""
|
||
override = os.environ.get("HAG_RUNTIME_DIR")
|
||
path = Path(override) if override else config.RUNTIME_DIR
|
||
path.mkdir(parents=True, exist_ok=True)
|
||
return path
|
||
|
||
|
||
def load_last_player() -> str | None:
|
||
try:
|
||
data = json.loads((runtime_dir() / LAST_PLAYER_FILE).read_text(encoding="utf-8"))
|
||
except (OSError, ValueError):
|
||
return None
|
||
if not isinstance(data, dict):
|
||
return None
|
||
name = str(data.get("name", "")).strip()
|
||
return name or None
|
||
|
||
|
||
def save_last_player(name: str) -> None:
|
||
name = name.strip()[: config.MAX_PLAYER_NAME_LENGTH]
|
||
if not name:
|
||
return
|
||
try:
|
||
(runtime_dir() / LAST_PLAYER_FILE).write_text(
|
||
json.dumps({"name": name}, ensure_ascii=False, indent=2) + "\n",
|
||
encoding="utf-8",
|
||
)
|
||
except OSError:
|
||
# Laufzeitdaten sind nice-to-have – ein Schreibfehler darf das Spiel
|
||
# nicht stoppen.
|
||
pass
|