Files
contracts-app/v2/init.py
T

46 lines
1.4 KiB
Python

"""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,
socket_timeout=10,
)
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