Skip to content

Commit a6b5d03

Browse files
committed
Use tenacity retries for secret file creation
1 parent baa4028 commit a6b5d03

1 file changed

Lines changed: 88 additions & 49 deletions

File tree

admin/create_secrets_files.py

Lines changed: 88 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@
1313
import vws_web_tools
1414
from dotenv import load_dotenv
1515
from 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

1723
if 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

6159
def _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

90120
def _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

Comments
 (0)