Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(952)

Side by Side Diff: build/android/pylib/device/decorators.py

Issue 265743002: [Android] Switch to new interfaces of GetAVDs and RestartAdbServer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase + nitfixes Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """
6 Function/method decorators that provide timeout and retry logic.
7 """
8
9 import functools
10
11 from pylib.device import device_errors
12 from pylib.utils import reraiser_thread
13 from pylib.utils import timeout_retry
14
15
16 def WithTimeoutAndRetries(f):
17 """ A decorator that handles timeouts and retries.
frankf 2014/05/13 18:16:31 fit everything on 1 line
18 """
19 @functools.wraps(f)
20 def TimeoutRetryWrapper(*args, **kwargs):
21 # handle retries and timeouts
22 timeout = kwargs.get('timeout')
23 retries = kwargs.get('retries')
24
25 # Check for exactly None s.t. zero values are valid.
26 if timeout is None:
27 raise TypeError("%s requires a 'timeout' parameter" % f.__name__)
28 if retries is None:
29 raise TypeError("%s requires a 'retries' parameter" % f.__name__)
30
31 def impl():
32 return f(*args, **kwargs)
33 try:
34 return timeout_retry.Run(impl, timeout, retries)
35 except reraiser_thread.TimeoutError as e:
36 raise device_errors.CommandTimeoutError(str(e))
37 return TimeoutRetryWrapper
38
39
40 def WithTimeoutAndRetriesDefaults(default_timeout, default_retries):
41 """ A decorator that handles timeouts and retries using the provided
42 default timeout and retry values if they aren't specified as a kwarg.
43 """
44 def decorator(f):
45 @functools.wraps(f)
46 def TimeoutRetryWrapper(*args, **kwargs):
47 kwargs['timeout'] = kwargs.get('timeout', default_timeout)
48 kwargs['retries'] = kwargs.get('retries', default_retries)
49 return WithTimeoutAndRetries(f)(*args, **kwargs)
50 return TimeoutRetryWrapper
51 return decorator
52
53
54 def WithTimeoutAndRetriesFromInstance(
55 default_timeout_name, default_retries_name):
56 """ Returns a decorator that handles timeouts and retries using default
frankf 2014/05/13 18:16:31 first sentence should fit on a line.
57 timeout and retry values from the object if they aren't specified as a
58 kwarg.
59 """
60 def decorator(f):
61 @functools.wraps(f)
62 def TimeoutRetryWrapper(device, *args, **kwargs):
63 kwargs['timeout'] = kwargs.get(
64 'timeout', getattr(device, default_timeout_name))
65 kwargs['retries'] = kwargs.get(
66 'retries', getattr(device, default_retries_name))
67 return WithTimeoutAndRetries(f)(device, *args, **kwargs)
68 return TimeoutRetryWrapper
69 return decorator
70
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698