可靠性

为自家的可调用对象套上重试:

from automation_file import retry_on_transient

@retry_on_transient(max_attempts=5, backoff_base=0.5)
def flaky_network_call(): ...

该装饰器只重试 retriable=(…) 中明确列出的异常类型 (默认是 ConnectionError / TimeoutError / OSError)。 切勿放宽到裸 Exception——那会把逻辑 bug 当成瞬时失败掩盖掉。 重试耗尽后会抛出 RetryExhaustedException, 并通过 raise ... from err 链回最后一次原因。

为单个动作设置上限:

from automation_file import Quota

quota = Quota(max_bytes=50 * 1024 * 1024, max_seconds=30.0)
with quota.time_budget("bulk-upload"):
    bulk_upload_work()

# 也可以直接装饰可调用对象:
@quota.wraps
def expensive(payload: bytes) -> None: ...

每个上限设置为 0 即表示禁用该项检查。