"""Skladište za app 'Namaz': izbor lokacije + bundlana lista lokacija. Bez openai/requests (uvozi ga i admin). Lista lokacija je bundlana (lokacije.json); id lokacije = indeks u toj listi (kako radi api.vaktija.ba). """ import json import os import tempfile import threading from pathlib import Path VAKTIJA_CONFIG_PATH = Path(os.environ.get( "IDRIZ_VAKTIJA_CONFIG_PATH", str(Path.home() / ".config/idriz/vaktija.json"))) DEFAULT_ID = 77 # Sarajevo _LOCATIONS_FILE = Path(__file__).with_name("lokacije.json") _lock = threading.Lock() try: _LOCATIONS: list[str] = json.loads(_LOCATIONS_FILE.read_text(encoding="utf-8")) except (OSError, json.JSONDecodeError): _LOCATIONS = ["Sarajevo"] def locations() -> list[dict]: """Sve lokacije kao [{'id': i, 'naziv': ...}], abecedno po nazivu.""" return sorted(({"id": i, "naziv": n} for i, n in enumerate(_LOCATIONS)), key=lambda x: x["naziv"].lower()) def valid_id(loc_id: int) -> bool: return isinstance(loc_id, int) and 0 <= loc_id < len(_LOCATIONS) def location_name(loc_id: int) -> str: return _LOCATIONS[loc_id] if valid_id(loc_id) else "Sarajevo" def get_location_id() -> int: try: data = json.loads(VAKTIJA_CONFIG_PATH.read_text(encoding="utf-8")) loc = int(data.get("lokacija_id", DEFAULT_ID)) except (OSError, ValueError, json.JSONDecodeError): return DEFAULT_ID return loc if valid_id(loc) else DEFAULT_ID def set_location_id(loc_id: int) -> int: if not valid_id(loc_id): loc_id = DEFAULT_ID with _lock: VAKTIJA_CONFIG_PATH.parent.mkdir(parents=True, exist_ok=True) fd, tmp = tempfile.mkstemp(dir=str(VAKTIJA_CONFIG_PATH.parent), suffix=".tmp") try: with os.fdopen(fd, "w", encoding="utf-8") as f: json.dump({"lokacija_id": loc_id}, f, ensure_ascii=False, indent=2) os.replace(tmp, VAKTIJA_CONFIG_PATH) finally: if os.path.exists(tmp): os.unlink(tmp) return loc_id