v2: чанки 30KB + MD5, /v2/chunk + /v2/finalize, Redis, worker, v2.0
This commit is contained in:
+44
@@ -0,0 +1,44 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user