Add configurable UPC and RA setup flows

This commit is contained in:
2026-09-29 13:33:45 +05:30
parent 97158d2006
commit ec38d5f65f
9 changed files with 228 additions and 29 deletions
+64 -4
View File
@@ -73,7 +73,7 @@ def get_time_session_times(token, row_text, default_start_time, default_end_time
def get_product_codes(token):
product_codes = parse_product_codes(token.get("product_codes"))
product_codes = parse_product_codes(token.get("create_product_codes", token.get("product_codes")))
if product_codes:
return product_codes
@@ -225,7 +225,36 @@ def create_rtm_token(driver, step, token):
handle_transient_popups(driver)
def create_upc_token(driver, step, token):
open_trading_maintenance_page(driver, Locator.tokengenerator)
handle_transient_popups(driver)
step.capture("open_token_generator_upc")
fields = [(Locator.generatormarketcode, token["market_code"], "market_code"), (Locator.generatorproductcode, token["product_code"], "product_code")]
if driver.find_elements(By.ID, Locator.generatorgenerationmode):
fields.append((Locator.generatorgenerationmode, token["generation_mode"], "generation_mode"))
for element_id, value, name in fields:
select_bootstrap_dropdown_by_id(driver, element_id, value, exact=True)
step.capture(f"select_{name}_upc")
step.click((By.XPATH, Locator.addnewtokenbtn), "click_add_new_token_upc")
timings = token.get("upc_times", {})
for name, locator, value in (
("order_normal_start", Locator.upcorderstart, timings.get("order_normal_start_time")),
("order_normal_end", Locator.upcorderend, timings.get("order_normal_end_time")),
("trade_start", Locator.upctradestart, timings.get("trade_session_start_time")),
("trade_end", Locator.upctradeend, timings.get("trade_session_end_time")),
):
if value:
type_first_visible_input(driver, locator, value)
step.capture(f"enter_{name}_upc")
step.click((By.XPATH, Locator.savetokenbtn), "save_token_upc")
handle_transient_popups(driver)
step.click((By.XPATH, Locator.tokengeneratorresetbtn), "reset_token_generator_upc")
def run_token_setup(driver, step, token):
if token.get("product_type", "").upper() == "UPC":
create_upc_token(driver, step, token)
return
if token.get("product_type", "").upper() == "RTM":
create_rtm_token(driver, step, token)
else:
@@ -251,17 +280,48 @@ def create_and_activate_token(driver, step, token):
select_labeled_ui_dropdown(driver, "PRODUCT CODE", product_code)
step.capture(f"select_product_code_{product_code.lower()}")
generation_mode = token.get("generation_mode")
if generation_mode:
mode_elements = driver.find_elements(By.ID, Locator.generatorgenerationmode)
if mode_elements:
select_bootstrap_dropdown_by_id(driver, Locator.generatorgenerationmode, generation_mode, exact=True)
step.capture(f"select_generation_mode_{product_code.lower()}")
step.click((By.XPATH, Locator.addnewtokenbtn), f"click_add_new_token_{product_code.lower()}")
next_day, token_expiry = get_delivery_date_and_expiry(token)
step.type((By.XPATH, Locator.tokendeliverystartdate), next_day, f"enter_delivery_start_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokendeliveryenddate), next_day, f"enter_delivery_end_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokenexpirydate), token_expiry, f"enter_token_expiry_date_{product_code.lower()}")
if token.get("product_type", "").upper() == "UPC":
today = datetime.now().strftime("%d/%m/%Y")
if token.get("generation_mode") == "AnyDayUPC":
step.type((By.XPATH, Locator.tokentradedate), today, f"enter_trade_date_{product_code.lower()}")
timings = token.get("upc_times", {})
normal_start = timings.get("order_normal_start_time")
if normal_start is None and timings.get("order_normal_start_offset_minutes") is not None:
normal_start = (datetime.now() + timedelta(minutes=timings["order_normal_start_offset_minutes"])).strftime("%H:%M")
values = {
Locator.upcordernormalstart: normal_start,
Locator.upcordernormalend: timings.get("order_normal_end_time"),
Locator.upctradesessionstart: timings.get("trade_session_start_time"),
Locator.upctradesessionend: timings.get("trade_session_end_time"),
}
for locator, value in values.items():
if value is None:
continue
type_first_visible_input(driver, locator, value)
if token.get("generation_mode") not in ("WeeklyUPC", "MonthlyUPC"):
step.type((By.XPATH, Locator.tokendeliverystartdate), next_day, f"enter_delivery_start_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokendeliveryenddate), next_day, f"enter_delivery_end_date_{product_code.lower()}")
step.type((By.XPATH, Locator.tokenexpirydate), token_expiry, f"enter_token_expiry_date_{product_code.lower()}")
step.click((By.XPATH, Locator.savetokenbtn), f"save_token_{product_code.lower()}")
handle_transient_popups(driver)
if token.get("product_type", "").upper() == "UPC":
step.click((By.XPATH, Locator.tokengeneratorresetbtn), f"reset_token_generator_{product_code.lower()}")
return
complete_time_session_edits_from_saved_token(driver, step, token)