+ start = datetime(int(start[0:4]), int(start[5:7]), int(start[8:10]))
+ end = datetime(int(end[0:4]), int(end[5:7]), int(end[8:10]))
+
+ parsed_url = urllib.parse.urlparse(href)
+ url = f"{parsed_url.netloc}{parsed_url.path}"
+ url_params = urllib.parse.parse_qs(parsed_url.fragment)
+
+ trigger_id = callback_context.triggered[0]["prop_id"].split(".")[0]
+ if trigger_id == "ri-duts":
+ ttype_opts = self._generate_options(self._get_ttypes(dut))
+ ttype_val = ttype_opts[0]["value"]
+ cad_opts = self._generate_options(
+ self._get_cadences(dut, ttype_val))
+ cad_val = cad_opts[0]["value"]
+ tbed_opts = self._generate_options(
+ self._get_test_beds(dut, ttype_val, cad_val))
+ tbed_val = tbed_opts[0]["value"]
+ ctrl_panel.set({
+ "ri-duts-value": dut,
+ "ri-ttypes-options": ttype_opts,
+ "ri-ttypes-value": ttype_val,
+ "ri-cadences-options": cad_opts,
+ "ri-cadences-value": cad_val,
+ "dd-tbeds-options": tbed_opts,
+ "dd-tbeds-value": tbed_val
+ })
+ elif trigger_id == "ri-ttypes":
+ cad_opts = self._generate_options(
+ self._get_cadences(ctrl_panel.get("ri-duts-value"), ttype))
+ cad_val = cad_opts[0]["value"]
+ tbed_opts = self._generate_options(
+ self._get_test_beds(ctrl_panel.get("ri-duts-value"),
+ ttype, cad_val))
+ tbed_val = tbed_opts[0]["value"]
+ ctrl_panel.set({
+ "ri-ttypes-value": ttype,
+ "ri-cadences-options": cad_opts,
+ "ri-cadences-value": cad_val,
+ "dd-tbeds-options": tbed_opts,
+ "dd-tbeds-value": tbed_val
+ })
+ elif trigger_id == "ri-cadences":
+ tbed_opts = self._generate_options(
+ self._get_test_beds(ctrl_panel.get("ri-duts-value"),
+ ctrl_panel.get("ri-ttypes-value"), cadence))
+ tbed_val = tbed_opts[0]["value"]
+ ctrl_panel.set({
+ "ri-cadences-value": cadence,
+ "dd-tbeds-options": tbed_opts,
+ "dd-tbeds-value": tbed_val
+ })
+ elif trigger_id == "dd-tbeds":
+ ctrl_panel.set({
+ "dd-tbeds-value": tbed
+ })
+ elif trigger_id == "dpr-period":
+ pass
+ elif trigger_id == "url":
+ # TODO: Add verification
+ if url_params:
+ new_job = url_params.get("job", list())[0]
+ new_start = url_params.get("start", list())[0]
+ new_end = url_params.get("end", list())[0]
+ if new_job and new_start and new_end:
+ start = datetime(
+ int(new_start[0:4]), int(new_start[5:7]),
+ int(new_start[8:10]))
+ end = datetime(
+ int(new_end[0:4]), int(new_end[5:7]),
+ int(new_end[8:10]))
+ job_params = self._set_job_params(new_job)
+ ctrl_panel = self.ControlPanel(None, job_params)
+ else:
+ ctrl_panel = self.ControlPanel(cp_data, self.default)
+ job = self._get_job(
+ ctrl_panel.get("ri-duts-value"),
+ ctrl_panel.get("ri-ttypes-value"),
+ ctrl_panel.get("ri-cadences-value"),
+ ctrl_panel.get("dd-tbeds-value")
+ )
+
+ job = self._get_job(
+ ctrl_panel.get("ri-duts-value"),
+ ctrl_panel.get("ri-ttypes-value"),
+ ctrl_panel.get("ri-cadences-value"),
+ ctrl_panel.get("dd-tbeds-value")