solution_challenge_backend / backend /face_metadata.py
github-actions
Deploy to Hugging Face
c794b6b
Raw
History Blame Contribute Delete
1.37 kB
"""Per-person metadata stored alongside face_database enrollments."""
from __future__ import annotations
import json
import os
META_FILENAME = "metadata.json"
DEFAULT_ROLE = "Staff"
def _meta_path(person_dir: str) -> str:
return os.path.join(person_dir, META_FILENAME)
def read_person_metadata(person_name: str, face_db_root: str) -> dict:
person_dir = os.path.join(face_db_root, person_name)
path = _meta_path(person_dir)
if not os.path.isfile(path):
return {"role": DEFAULT_ROLE}
try:
with open(path, encoding="utf-8") as fh:
data = json.load(fh)
if isinstance(data, dict):
return {"role": data.get("role") or DEFAULT_ROLE, **data}
except (OSError, json.JSONDecodeError):
pass
return {"role": DEFAULT_ROLE}
def write_person_metadata(person_name: str, face_db_root: str, *, role: str | None = None, **extra) -> dict:
person_dir = os.path.join(face_db_root, person_name)
os.makedirs(person_dir, exist_ok=True)
current = read_person_metadata(person_name, face_db_root)
if role is not None:
current["role"] = (role or DEFAULT_ROLE).strip() or DEFAULT_ROLE
current.update({k: v for k, v in extra.items() if v is not None})
with open(_meta_path(person_dir), "w", encoding="utf-8") as fh:
json.dump(current, fh, indent=2)
return current