X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5a80356ddc3798f6530e306901d7ea5e19cfe3f9..72d24b26cac507988ba6583064451b81d1854d78:/sdk/python/arvados/retry.py diff --git a/sdk/python/arvados/retry.py b/sdk/python/arvados/retry.py index 5dc31aefa7..3d2fc48e31 100644 --- a/sdk/python/arvados/retry.py +++ b/sdk/python/arvados/retry.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +import functools +import inspect import time from collections import deque @@ -138,3 +140,19 @@ def check_http_response_success(result): return False else: return None # Get well soon, server. + +def retry_method(orig_func): + """Provide a default value for a method's num_retries argument. + + This is a decorator for instance and class methods that accept a + num_retries argument, with a None default. When the method is called + without a value for num_retries, it will be set from the underlying + instance or class' num_retries attribute. + """ + @functools.wraps(orig_func) + def num_retries_setter(self, *args, **kwargs): + arg_vals = inspect.getcallargs(orig_func, self, *args, **kwargs) + if arg_vals['num_retries'] is None: + kwargs['num_retries'] = self.num_retries + return orig_func(self, *args, **kwargs) + return num_retries_setter