feat: sync version-driven intel coverage
这个提交包含在:
@@ -151,6 +151,16 @@ def _release_inflight(cache_key: str) -> None:
|
||||
event.set()
|
||||
|
||||
|
||||
def _retry_delay_seconds(response: requests.Response, *, attempt: int, backoff_seconds: float) -> float:
|
||||
retry_after = response.headers.get("Retry-After")
|
||||
if retry_after:
|
||||
try:
|
||||
return max(backoff_seconds * attempt, min(15.0, float(retry_after) * attempt))
|
||||
except ValueError:
|
||||
pass
|
||||
return backoff_seconds * attempt
|
||||
|
||||
|
||||
def build_session(source: Dict[str, Any] | None = None) -> requests.Session:
|
||||
session = requests.Session()
|
||||
session.trust_env = True
|
||||
@@ -220,6 +230,12 @@ def request(
|
||||
verify=verify,
|
||||
**kwargs,
|
||||
)
|
||||
if response.status_code == 429 and attempt < status_retries:
|
||||
time.sleep(_retry_delay_seconds(response, attempt=attempt, backoff_seconds=backoff_seconds))
|
||||
continue
|
||||
if 500 <= response.status_code < 600 and attempt < status_retries:
|
||||
time.sleep(backoff_seconds * attempt)
|
||||
continue
|
||||
if cacheable and response.ok:
|
||||
_write_cached_response(cache_key, response)
|
||||
return response
|
||||
|
||||
在新工单中引用
屏蔽一个用户