fix(upload): параметризация pullRetries/pullRetryDelay/pullTimeout, configure лимитов/TTL, onStatus в init, логирование sid/name

This commit is contained in:
“Naeel”
2026-08-25 08:37:09 +03:00
parent 5711e97fe5
commit af172115b0
9 changed files with 64 additions and 29 deletions
+9 -5
View File
@@ -8,12 +8,16 @@ from .config import PULL_RETRIES, PULL_RETRY_DELAY
log = logging.getLogger("upload.upload_refs.pull")
def pull_file(client, url: str) -> bytes:
def pull_file(client, url: str, retries: int = PULL_RETRIES,
delay: float = PULL_RETRY_DELAY, sid: str = None, name: str = None) -> bytes:
"""GET url с ретраями; читает по частям (stream).
Args:
client: httpx.Client
url: URL файла на ВМ-буфере.
retries: число попыток.
delay: пауза между попытками (сек).
sid/name: для логирования (опционально).
Returns:
Содержимое файла (bytes).
@@ -22,14 +26,14 @@ def pull_file(client, url: str) -> bytes:
Последнюю ошибку попытки, если все ретраи не удались.
"""
last_err = None
for attempt in range(PULL_RETRIES):
for attempt in range(retries):
try:
with client.stream("GET", url) as resp:
resp.raise_for_status()
return b"".join(resp.iter_bytes())
except Exception as e:
last_err = e
log.warning("pull: attempt %d/%d failed url=%r: %r",
attempt + 1, PULL_RETRIES, url, e)
time.sleep(PULL_RETRY_DELAY)
log.warning("pull: attempt %d/%d failed sid=%s file=%r: %r",
attempt + 1, retries, sid, name, e)
time.sleep(delay)
raise last_err if last_err else RuntimeError("pull failed")