From 5f11b63d1aadc2de9523dcc8ff6c8f543b278aca Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Sun, 11 Nov 2012 19:58:00 +0000 Subject: Retry atspi calls to avoid timing issues --- 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] -- cgit v0.9.1