diff options
author | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-11 19:58:00 (GMT) |
---|---|---|
committer | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-11 19:58:00 (GMT) |
commit | 5f11b63d1aadc2de9523dcc8ff6c8f543b278aca (patch) | |
tree | 11a32353f4e14450d4129913cd6bd60c7cddada6 /tests/tree.py | |
parent | f84db6890556e2dd966d0d5853dae8fe1c7db900 (diff) |
Retry atspi calls to avoid timing issues
Diffstat (limited to 'tests/tree.py')
-rw-r--r-- | tests/tree.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/tree.py b/tests/tree.py index e8746e2..9b09ad2 100644 --- a/tests/tree.py +++ b/tests/tree.py @@ -1,8 +1,24 @@ +import time + import pyatspi def get_root(): return Node(pyatspi.Registry.getDesktop(0)) +def retry(func): + def wrapped(*args, **kwargs): + n_retries = 10 + + while n_retries > 0: + result = func(*args, **kwargs) + if result is not None: + return result + + time.sleep(5) + n_retries = n_retries - 1 + + return wrapped + class Node: def __init__(self, accessible): self._accessible = accessible @@ -16,19 +32,25 @@ class Node: return True + @retry def find_child(self, name=None, role_name=None): def predicate(accessible): return self._predicate(accessible, name, role_name) accessible = pyatspi.findDescendant(self._accessible, predicate) + if accessible is None: + return None return Node(accessible) + @retry def find_children(self, name=None, role_name=None): def predicate(accessible): return self._predicate(accessible, name, role_name) all_accessibles = pyatspi.findAllDescendants(self._accessible, predicate) + if not all_accessibles: + return None return [Node(accessible) for accessible in all_accessibles] |