import time from functools import wraps def retry(attempts=3, base_delay=0.25): def decorate(function): @wraps(function) def wrapped(*args, **kwargs): for attempt in range(attempts): try: return function(*args, **kwargs) except TimeoutError: if attempt == attempts - 1: raise time.sleep(base_delay * (2 ** attempt)) return wrapped return decorate