1313import vws_web_tools
1414from dotenv import load_dotenv
1515from selenium .common .exceptions import TimeoutException
16+ from tenacity import (
17+ retry ,
18+ retry_if_exception_type ,
19+ stop_after_attempt ,
20+ wait_exponential ,
21+ )
1622
1723if TYPE_CHECKING :
1824 from selenium .webdriver .remote .webdriver import WebDriver
@@ -25,66 +31,90 @@ def _create_and_get_database_details(
2531 password : str ,
2632 license_name : str ,
2733 database_name : str ,
28- ) -> "DatabaseDict | None " :
34+ ) -> "DatabaseDict" :
2935 """Create a cloud database and get its details.
3036
31- Returns database details or None if a timeout occurs .
37+ Returns database details.
3238 """
3339 vws_web_tools .log_in (
3440 driver = driver ,
3541 email_address = email_address ,
3642 password = password ,
3743 )
3844 vws_web_tools .wait_for_logged_in (driver = driver )
39- try :
40- vws_web_tools .create_license (driver = driver , license_name = license_name )
41- except TimeoutException :
42- sys .stderr .write ("Timed out waiting for license creation\n " )
43- return None
45+ vws_web_tools .create_license (driver = driver , license_name = license_name )
4446
4547 vws_web_tools .create_cloud_database (
4648 driver = driver ,
4749 database_name = database_name ,
4850 license_name = license_name ,
4951 )
5052
51- try :
52- return vws_web_tools .get_database_details (
53- driver = driver ,
54- database_name = database_name ,
55- )
56- except TimeoutException :
57- sys .stderr .write ("Timed out waiting for database to be created\n " )
58- return None
53+ return vws_web_tools .get_database_details (
54+ driver = driver ,
55+ database_name = database_name ,
56+ )
5957
6058
6159def _create_and_get_vumark_details (
6260 driver : "WebDriver" ,
6361 vumark_database_name : str ,
64- ) -> "VuMarkDatabaseDict | None " :
62+ ) -> "VuMarkDatabaseDict" :
6563 """Create a VuMark database and get its details.
6664
67- Returns VuMark database details or None if a timeout occurs .
65+ Returns VuMark database details.
6866 """
69- try :
70- vws_web_tools .create_vumark_database (
71- driver = driver ,
72- database_name = vumark_database_name ,
73- )
74- except TimeoutException :
75- sys .stderr .write ("Timed out waiting for VuMark database creation\n " )
76- return None
77-
78- try :
79- return vws_web_tools .get_vumark_database_details (
80- driver = driver ,
81- database_name = vumark_database_name ,
82- )
83- except TimeoutException :
84- sys .stderr .write (
85- "Timed out waiting for VuMark database to be created\n "
86- )
87- return None
67+ vws_web_tools .create_vumark_database (
68+ driver = driver ,
69+ database_name = vumark_database_name ,
70+ )
71+
72+ return vws_web_tools .get_vumark_database_details (
73+ driver = driver ,
74+ database_name = vumark_database_name ,
75+ )
76+
77+
78+ @retry (
79+ retry = retry_if_exception_type (TimeoutException ),
80+ stop = stop_after_attempt (3 ),
81+ wait = wait_exponential (multiplier = 2 , min = 5 , max = 30 ),
82+ reraise = True ,
83+ )
84+ def _create_and_get_database_details_with_retries (
85+ driver : "WebDriver" ,
86+ email_address : str ,
87+ password : str ,
88+ license_name : str ,
89+ database_name : str ,
90+ ) -> "DatabaseDict" :
91+ """Create a cloud database and return details with retries on
92+ timeout.
93+ """
94+ return _create_and_get_database_details (
95+ driver = driver ,
96+ email_address = email_address ,
97+ password = password ,
98+ license_name = license_name ,
99+ database_name = database_name ,
100+ )
101+
102+
103+ @retry (
104+ retry = retry_if_exception_type (TimeoutException ),
105+ stop = stop_after_attempt (3 ),
106+ wait = wait_exponential (multiplier = 2 , min = 5 , max = 30 ),
107+ reraise = True ,
108+ )
109+ def _create_and_get_vumark_details_with_retries (
110+ driver : "WebDriver" ,
111+ vumark_database_name : str ,
112+ ) -> "VuMarkDatabaseDict" :
113+ """Create a VuMark database and return details with retries on timeout."""
114+ return _create_and_get_vumark_details (
115+ driver = driver ,
116+ vumark_database_name = vumark_database_name ,
117+ )
88118
89119
90120def _generate_secrets_file_content (
@@ -147,23 +177,32 @@ def main() -> None:
147177 database_name = f"my-database-{ time } "
148178 vumark_database_name = f"my-vumark-database-{ time } "
149179
150- database_details = _create_and_get_database_details (
151- driver = driver ,
152- email_address = email_address ,
153- password = password ,
154- license_name = license_name ,
155- database_name = database_name ,
156- )
157- if database_details is None :
180+ try :
181+ database_details = _create_and_get_database_details_with_retries (
182+ driver = driver ,
183+ email_address = email_address ,
184+ password = password ,
185+ license_name = license_name ,
186+ database_name = database_name ,
187+ )
188+ except TimeoutException :
189+ sys .stderr .write (
190+ "Timed out waiting for license/database creation "
191+ "after retries\n "
192+ )
158193 driver .quit ()
159194 driver = None
160195 continue
161196
162- vumark_details = _create_and_get_vumark_details (
163- driver = driver ,
164- vumark_database_name = vumark_database_name ,
165- )
166- if vumark_details is None :
197+ try :
198+ vumark_details = _create_and_get_vumark_details_with_retries (
199+ driver = driver ,
200+ vumark_database_name = vumark_database_name ,
201+ )
202+ except TimeoutException :
203+ sys .stderr .write (
204+ "Timed out waiting for VuMark creation after retries\n "
205+ )
167206 driver .quit ()
168207 driver = None
169208 continue
0 commit comments