@@ -51,26 +51,31 @@ def get_pending_letter_ids(
5151 headers : dict ,
5252 letters_endpoint : str ,
5353 limit : int = 1 ,
54- timeout_s : int = 60 ,
55- interval_s : int = 5 ,
54+ timeout_s : int = 20 ,
55+ interval_s : int = 2 ,
56+ retries : int = 5 ,
5657) -> list :
57- """Poll GET /letters until the requested number of PENDING letters are returned.
58+ """Injects the given number of pending letters as test data, then waits for them to become
59+ visible via the letters endpoint. Retries to account for other tests running in parallel stealing the letters
5860
5961 Returns a list of letter ID strings.
60- Raises TimeoutError if fewer than `limit` letters are returned within timeout_s .
62+ Raises TimeoutError if fewer than `limit` letters are returned after all retries are exhausted .
6163 """
62- deadline = time .monotonic () + timeout_s
63- while time .monotonic () < deadline :
64- response = requests .get (
65- f"{ url } /{ letters_endpoint } ?limit={ limit } " , headers = headers
66- )
67- response .raise_for_status ()
68- data = response .json ().get ("data" , [])
69- if len (data ) >= limit :
70- return [item .get ("id" ) for item in data ]
71- time .sleep (interval_s )
64+
65+ for _ in range (retries ):
66+ create_test_data (limit )
67+ deadline = time .monotonic () + timeout_s
68+ while time .monotonic () < deadline :
69+ response = requests .get (
70+ f"{ url } /{ letters_endpoint } ?limit={ limit } " , headers = headers
71+ )
72+ response .raise_for_status ()
73+ data = response .json ().get ("data" , [])
74+ if len (data ) >= limit :
75+ return [item .get ("id" ) for item in data ]
76+ time .sleep (interval_s )
7277
7378 raise TimeoutError (
74- f"Timed out after { timeout_s } s waiting for { limit } PENDING letter(s) at "
79+ f"Timed out after { retries } retries waiting for { limit } PENDING letter(s) at "
7580 f"{ url } /{ letters_endpoint } "
7681 )
0 commit comments