Files
Nexus/server/infrastructure/redis/transfer_package_store.py
T
r 73278667e0 feat(files): 跨服务器文件直传与打包投递
A→B SFTP 中继与一键 tar 打包 curl 拉取;含审计修复与 18 项单测。
2026-06-21 12:48:50 +08:00

42 lines
1.1 KiB
Python

"""Redis-backed metadata for cross-server package transfer download tokens."""
from __future__ import annotations
import json
import logging
from typing import Any
from server.infrastructure.redis.client import get_redis
logger = logging.getLogger("nexus.transfer_package_store")
REDIS_PREFIX = "transfer:pkg:"
DEFAULT_TTL_SECONDS = 3600
def _key(token: str) -> str:
return f"{REDIS_PREFIX}{token}"
async def save_package_meta(token: str, meta: dict[str, Any], *, ttl: int = DEFAULT_TTL_SECONDS) -> None:
redis = get_redis()
await redis.set(_key(token), json.dumps(meta, ensure_ascii=False), ex=ttl)
async def load_package_meta(token: str) -> dict[str, Any] | None:
redis = get_redis()
raw = await redis.get(_key(token))
if not raw:
return None
try:
data = json.loads(raw)
except json.JSONDecodeError:
logger.warning("Invalid transfer package JSON for token prefix %s…", token[:8])
return None
return data if isinstance(data, dict) else None
async def delete_package_meta(token: str) -> None:
redis = get_redis()
await redis.delete(_key(token))