"""v2/init.py — Redis и хранилище чанков. БД — через site/db.py.""" import os, json, logging, redis logger = logging.getLogger(__name__) CHUNK_STORE_KEY = "v2:chunks:" FINALIZE_QUEUE = "v2:finalize" _r = None def get_redis(): global _r if _r is None: _r = redis.Redis( host=os.getenv("REDIS_HOST", "redisk8s.f6303a9d-4ab1-4b2f-8aa8-08f933d02f82.svc.cluster.local"), port=int(os.getenv("REDIS_PORT", "6379")), password=os.getenv("REDIS_PASS", "aLITloRefJEiCPqUc2xB"), decode_responses=True, socket_connect_timeout=5, ) return _r def store_chunk(upload_id, index, data_b64): get_redis().rpush(f"{CHUNK_STORE_KEY}{upload_id}", json.dumps([index, data_b64])) def get_chunks(upload_id): raw = get_redis().lrange(f"{CHUNK_STORE_KEY}{upload_id}", 0, -1) chunks = [] for r in raw: idx, data = json.loads(r) chunks.append((idx, data)) chunks.sort() return [c[1] for c in chunks] def delete_chunks(upload_id): get_redis().delete(f"{CHUNK_STORE_KEY}{upload_id}") def push_finalize(task): get_redis().rpush(FINALIZE_QUEUE, json.dumps(task, ensure_ascii=False)) def pop_finalize(timeout=5): result = get_redis().blpop(FINALIZE_QUEUE, timeout=timeout) return json.loads(result[1]) if result else None