PriyaPbs/ModelOptix
0
1import json2import os3import threading4 5BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))6FALLBACK_FILE = os.path.join(BASE_DIR, "data", "state_fallback.json")7STATE_LOCK = threading.RLock()8 9 10def _load_fallback():11 with STATE_LOCK:12 if os.path.exists(FALLBACK_FILE):13 try:14 with open(FALLBACK_FILE, "r") as f:15 return json.load(f)16 except Exception:17 return {}18 return {}19 20 21def _save_fallback(data):22 with STATE_LOCK:23 os.makedirs(os.path.dirname(FALLBACK_FILE), exist_ok=True)24 temp_file = f"{FALLBACK_FILE}.tmp"25 with open(temp_file, "w") as f:26 json.dump(data, f)27 f.flush()28 os.fsync(f.fileno())29 os.replace(temp_file, FALLBACK_FILE)30 31 32class RedisDict:33 def __init__(self, prefix, client=None, ttl_seconds=86400):34 self.prefix = prefix35 self.client = None36 37 def _get_memory_store(self):38 return _load_fallback().get(self.prefix, {})39 40 def _set_memory_store(self, key, value):41 data = _load_fallback()42 data.setdefault(self.prefix, {})[key] = value43 _save_fallback(data)44 45 def __setitem__(self, key, value):46 self._set_memory_store(key, value)47 48 def __getitem__(self, key):49 store = self._get_memory_store()50 if key not in store:51 raise KeyError(key)52 return store[key]53 54 def get(self, key, default=None):55 return self._get_memory_store().get(key, default)56 57 def __contains__(self, key):58 return key in self._get_memory_store()59 60 61UPLOAD_JOBS = RedisDict("upload")62CONFIG_JOBS = RedisDict("config")63TRAINING_JOBS = RedisDict("training")64 