Part Request submitter: retry cold first navigation (avoids transient timeout on first component)

main
admin 2026-07-15 07:21:24 +00:00
parent 37b5992b0e
commit 1b906dc51a
No known key found for this signature in database
2 changed files with 15 additions and 7 deletions

Binary file not shown.

View File

@ -122,18 +122,26 @@ def _attach_files(driver, files):
def submit_request(driver, base, req, no_submit=False): def submit_request(driver, base, req, no_submit=False):
driver.get(f"{base}/partrequestsmanagement/Tasks/Add") url = f"{base}/partrequestsmanagement/Tasks/Add"
err = None
for attempt in range(3): # retry: first nav can be slow/cold
driver.get(url)
try: try:
_wait(driver, EC.presence_of_element_located((By.ID, "Manufacturer")), t=20) _wait(driver, EC.presence_of_element_located((By.ID, "Manufacturer")), t=20)
except TimeoutException: err = None
url = driver.current_url break
if any(k in url.lower() for k in ("auth.altium.com", "signin", "login", "oauth")): except TimeoutException as e:
err = e
time.sleep(2)
if err is not None:
cur = driver.current_url
if any(k in cur.lower() for k in ("auth.altium.com", "signin", "login", "oauth")):
raise RuntimeError( raise RuntimeError(
"NOT SIGNED IN — this Chrome (the one on the debug port) is on the Altium login " "NOT SIGNED IN — this Chrome (the one on the debug port) is on the Altium login "
"page, so the form never loaded. Open that same Chrome profile, sign into the " "page, so the form never loaded. Open that same Chrome profile, sign into the "
"Workspace (keep me signed in), leave it open, and re-run.") "Workspace (keep me signed in), leave it open, and re-run.")
raise RuntimeError(f"The 'Add new request' form did not load (no #Manufacturer field). " raise RuntimeError(f"The 'Add new request' form did not load (no #Manufacturer field). "
f"Current page URL: {url}") f"Current page URL: {cur}")
_set_text(driver, By.ID, "Manufacturer", req.get("manufacturer", "")) _set_text(driver, By.ID, "Manufacturer", req.get("manufacturer", ""))
_set_text(driver, By.ID, "ManufacturerPartNumbers", req.get("mpn", "")) _set_text(driver, By.ID, "ManufacturerPartNumbers", req.get("mpn", ""))
_set_text(driver, By.ID, "Description", req.get("description", "")) _set_text(driver, By.ID, "Description", req.get("description", ""))