Index: build/android/devil/android/decorators.py |
diff --git a/build/android/devil/android/decorators.py b/build/android/devil/android/decorators.py |
deleted file mode 100644 |
index 004ac8bcb9594659bcd59401b2f5e153f751486a..0000000000000000000000000000000000000000 |
--- a/build/android/devil/android/decorators.py |
+++ /dev/null |
@@ -1,174 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-""" |
-Function/method decorators that provide timeout and retry logic. |
-""" |
- |
-import functools |
-import itertools |
-import sys |
- |
-from devil.android import device_errors |
-from devil.utils import cmd_helper |
-from devil.utils import reraiser_thread |
-from devil.utils import timeout_retry |
- |
-DEFAULT_TIMEOUT_ATTR = '_default_timeout' |
-DEFAULT_RETRIES_ATTR = '_default_retries' |
- |
- |
-def _TimeoutRetryWrapper( |
- f, timeout_func, retries_func, retry_if_func=timeout_retry.AlwaysRetry, |
- pass_values=False): |
- """ Wraps a funcion with timeout and retry handling logic. |
- |
- Args: |
- f: The function to wrap. |
- timeout_func: A callable that returns the timeout value. |
- retries_func: A callable that returns the retries value. |
- pass_values: If True, passes the values returned by |timeout_func| and |
- |retries_func| to the wrapped function as 'timeout' and |
- 'retries' kwargs, respectively. |
- Returns: |
- The wrapped function. |
- """ |
- @functools.wraps(f) |
- def timeout_retry_wrapper(*args, **kwargs): |
- timeout = timeout_func(*args, **kwargs) |
- retries = retries_func(*args, **kwargs) |
- if pass_values: |
- kwargs['timeout'] = timeout |
- kwargs['retries'] = retries |
- @functools.wraps(f) |
- def impl(): |
- return f(*args, **kwargs) |
- try: |
- if timeout_retry.CurrentTimeoutThreadGroup(): |
- # Don't wrap if there's already an outer timeout thread. |
- return impl() |
- else: |
- desc = '%s(%s)' % (f.__name__, ', '.join(itertools.chain( |
- (str(a) for a in args), |
- ('%s=%s' % (k, str(v)) for k, v in kwargs.iteritems())))) |
- return timeout_retry.Run(impl, timeout, retries, desc=desc, |
- retry_if_func=retry_if_func) |
- except reraiser_thread.TimeoutError as e: |
- raise device_errors.CommandTimeoutError(str(e)), None, ( |
- sys.exc_info()[2]) |
- except cmd_helper.TimeoutError as e: |
- raise device_errors.CommandTimeoutError(str(e)), None, ( |
- sys.exc_info()[2]) |
- return timeout_retry_wrapper |
- |
- |
-def WithTimeoutAndRetries(f): |
- """A decorator that handles timeouts and retries. |
- |
- 'timeout' and 'retries' kwargs must be passed to the function. |
- |
- Args: |
- f: The function to decorate. |
- Returns: |
- The decorated function. |
- """ |
- get_timeout = lambda *a, **kw: kw['timeout'] |
- get_retries = lambda *a, **kw: kw['retries'] |
- return _TimeoutRetryWrapper(f, get_timeout, get_retries) |
- |
- |
-def WithTimeoutAndConditionalRetries(retry_if_func): |
- """Returns a decorator that handles timeouts and, in some cases, retries. |
- |
- 'timeout' and 'retries' kwargs must be passed to the function. |
- |
- Args: |
- retry_if_func: A unary callable that takes an exception and returns |
- whether failures should be retried. |
- Returns: |
- The actual decorator. |
- """ |
- def decorator(f): |
- get_timeout = lambda *a, **kw: kw['timeout'] |
- get_retries = lambda *a, **kw: kw['retries'] |
- return _TimeoutRetryWrapper( |
- f, get_timeout, get_retries, retry_if_func=retry_if_func) |
- return decorator |
- |
- |
-def WithExplicitTimeoutAndRetries(timeout, retries): |
- """Returns a decorator that handles timeouts and retries. |
- |
- The provided |timeout| and |retries| values are always used. |
- |
- Args: |
- timeout: The number of seconds to wait for the decorated function to |
- return. Always used. |
- retries: The number of times the decorated function should be retried on |
- failure. Always used. |
- Returns: |
- The actual decorator. |
- """ |
- def decorator(f): |
- get_timeout = lambda *a, **kw: timeout |
- get_retries = lambda *a, **kw: retries |
- return _TimeoutRetryWrapper(f, get_timeout, get_retries) |
- return decorator |
- |
- |
-def WithTimeoutAndRetriesDefaults(default_timeout, default_retries): |
- """Returns a decorator that handles timeouts and retries. |
- |
- The provided |default_timeout| and |default_retries| values are used only |
- if timeout and retries values are not provided. |
- |
- Args: |
- default_timeout: The number of seconds to wait for the decorated function |
- to return. Only used if a 'timeout' kwarg is not passed |
- to the decorated function. |
- default_retries: The number of times the decorated function should be |
- retried on failure. Only used if a 'retries' kwarg is not |
- passed to the decorated function. |
- Returns: |
- The actual decorator. |
- """ |
- def decorator(f): |
- get_timeout = lambda *a, **kw: kw.get('timeout', default_timeout) |
- get_retries = lambda *a, **kw: kw.get('retries', default_retries) |
- return _TimeoutRetryWrapper(f, get_timeout, get_retries, pass_values=True) |
- return decorator |
- |
- |
-def WithTimeoutAndRetriesFromInstance( |
- default_timeout_name=DEFAULT_TIMEOUT_ATTR, |
- default_retries_name=DEFAULT_RETRIES_ATTR, |
- min_default_timeout=None): |
- """Returns a decorator that handles timeouts and retries. |
- |
- The provided |default_timeout_name| and |default_retries_name| are used to |
- get the default timeout value and the default retries value from the object |
- instance if timeout and retries values are not provided. |
- |
- Note that this should only be used to decorate methods, not functions. |
- |
- Args: |
- default_timeout_name: The name of the default timeout attribute of the |
- instance. |
- default_retries_name: The name of the default retries attribute of the |
- instance. |
- min_timeout: Miniumum timeout to be used when using instance timeout. |
- Returns: |
- The actual decorator. |
- """ |
- def decorator(f): |
- def get_timeout(inst, *_args, **kwargs): |
- ret = getattr(inst, default_timeout_name) |
- if min_default_timeout is not None: |
- ret = max(min_default_timeout, ret) |
- return kwargs.get('timeout', ret) |
- def get_retries(inst, *_args, **kwargs): |
- return kwargs.get('retries', getattr(inst, default_retries_name)) |
- return _TimeoutRetryWrapper(f, get_timeout, get_retries, pass_values=True) |
- return decorator |
- |