Skip to content

Commit 7a4a6f1

Browse files
Merge pull request #2934 from VWS-Python/adamtheturtle/pr-update
Add tenacity retries to secrets file creation
2 parents baa4028 + 7604f0f commit 7a4a6f1

1 file changed

Lines changed: 53 additions & 49 deletions

File tree

admin/create_secrets_files.py

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,78 +13,74 @@
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
1925
from vws_web_tools import DatabaseDict, VuMarkDatabaseDict
2026

2127

28+
RETRY_ON_TIMEOUT = retry(
29+
retry=retry_if_exception_type(exception_types=TimeoutException),
30+
stop=stop_after_attempt(max_attempt_number=3),
31+
wait=wait_exponential(multiplier=2, min=5, max=30),
32+
reraise=True,
33+
)
34+
35+
2236
def _create_and_get_database_details(
2337
driver: "WebDriver",
2438
email_address: str,
2539
password: str,
2640
license_name: str,
2741
database_name: str,
28-
) -> "DatabaseDict | None":
42+
) -> "DatabaseDict":
2943
"""Create a cloud database and get its details.
3044
31-
Returns database details or None if a timeout occurs.
45+
Returns database details.
3246
"""
3347
vws_web_tools.log_in(
3448
driver=driver,
3549
email_address=email_address,
3650
password=password,
3751
)
3852
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
53+
vws_web_tools.create_license(driver=driver, license_name=license_name)
4454

4555
vws_web_tools.create_cloud_database(
4656
driver=driver,
4757
database_name=database_name,
4858
license_name=license_name,
4959
)
5060

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
61+
return RETRY_ON_TIMEOUT(vws_web_tools.get_database_details)(
62+
driver=driver,
63+
database_name=database_name,
64+
)
5965

6066

6167
def _create_and_get_vumark_details(
6268
driver: "WebDriver",
6369
vumark_database_name: str,
64-
) -> "VuMarkDatabaseDict | None":
70+
) -> "VuMarkDatabaseDict":
6571
"""Create a VuMark database and get its details.
6672
67-
Returns VuMark database details or None if a timeout occurs.
73+
Returns VuMark database details.
6874
"""
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
75+
vws_web_tools.create_vumark_database(
76+
driver=driver,
77+
database_name=vumark_database_name,
78+
)
79+
80+
return RETRY_ON_TIMEOUT(vws_web_tools.get_vumark_database_details)(
81+
driver=driver,
82+
database_name=vumark_database_name,
83+
)
8884

8985

9086
def _generate_secrets_file_content(
@@ -147,23 +143,31 @@ def main() -> None:
147143
database_name = f"my-database-{time}"
148144
vumark_database_name = f"my-vumark-database-{time}"
149145

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:
146+
try:
147+
database_details = _create_and_get_database_details(
148+
driver=driver,
149+
email_address=email_address,
150+
password=password,
151+
license_name=license_name,
152+
database_name=database_name,
153+
)
154+
except TimeoutException:
155+
sys.stderr.write(
156+
"Timed out waiting for database setup/details after retries\n"
157+
)
158158
driver.quit()
159159
driver = None
160160
continue
161161

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:
162+
try:
163+
vumark_details = _create_and_get_vumark_details(
164+
driver=driver,
165+
vumark_database_name=vumark_database_name,
166+
)
167+
except TimeoutException:
168+
sys.stderr.write(
169+
"Timed out waiting for VuMark setup/details after retries\n"
170+
)
167171
driver.quit()
168172
driver = None
169173
continue

0 commit comments

Comments
 (0)