可靠性

為自家的可呼叫物件套上重試:

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 即表示停用該項檢查。