from dash import Input, Output, State
from dash.exceptions import PreventUpdate
from yaml import load, FullLoader, YAMLError
-from datetime import datetime, timedelta
+from datetime import datetime
from copy import deepcopy
from json import loads, JSONDecodeError
from ast import literal_eval
from ..utils.constants import Constants as C
from ..utils.utils import show_tooltip, label, sync_checklists, list_tests, \
- get_date, gen_new_url
+ gen_new_url, generate_options
from ..utils.url_processing import url_decode
from ..data.data import Data
from .graphs import graph_trending, graph_hdrh_latency, \
if self.html_layout and self.spec_tbs:
return html.Div(
id="div-main",
+ className="small",
children=[
dbc.Row(
id="row-navbar",
class_name="me-1",
color="info"
)
- ],
- size="md",
- )
- ]
- ),
- dbc.Row(
- class_name="gy-1",
- children=[
- dbc.Label(
- class_name="gy-1",
- children=show_tooltip(self._tooltips,
- "help-time-period", "Time Period"),
- ),
- dcc.DatePickerRange(
- id="dpr-period",
- className="d-flex justify-content-center",
- min_date_allowed=\
- datetime.utcnow() - timedelta(
- days=self.time_period),
- max_date_allowed=datetime.utcnow(),
- initial_visible_month=datetime.utcnow(),
- start_date=\
- datetime.utcnow() - timedelta(
- days=self.time_period),
- end_date=datetime.utcnow(),
- display_format="D MMM YY"
+ ]
)
]
),
color="info",
disabled=False
),
- ],
- size="md",
+ ]
)
]
),
"cl-ctrl-testtype-all-options": C.CL_ALL_DISABLED,
"btn-ctrl-add-disabled": True,
"cl-normalize-value": list(),
- "cl-selected-options": list(),
+ "cl-selected-options": list()
}
self._panel = deepcopy(self._defaults)
Input("cl-ctrl-testtype-all", "value"),
Input("cl-ctrl-normalize", "value"),
Input("btn-ctrl-add", "n_clicks"),
- Input("dpr-period", "start_date"),
- Input("dpr-period", "end_date"),
Input("btn-sel-remove", "n_clicks"),
Input("btn-sel-remove-all", "n_clicks"),
Input("url", "href")
dd_dut: str, dd_phy: str, dd_area: str, dd_test: str, cl_core: list,
cl_core_all: list, cl_framesize: list, cl_framesize_all: list,
cl_testtype: list, cl_testtype_all: list, cl_normalize: list,
- btn_add: int, d_start: str, d_end: str, btn_remove: int,
+ btn_add: int, btn_remove: int,
btn_remove_all: int, href: str) -> tuple:
"""Update the application when the event is detected.
:param cl_testtype_all: Input - All test types.
:param cl_normalize: Input - Normalize the results.
:param btn_add: Input - Button "Add Selected" tests.
- :param d_start: Date and time where the data processing starts.
- :param d_end: Date and time where the data processing ends.
:param btn_remove: Input - Button "Remove selected" tests.
:param btn_remove_all: Input - Button "Remove All" tests.
:param href: Input - The URL provided by the browser.
:type cl_testtype_all: list
:type cl_normalize: list
:type btn_add: int
- :type d_start: str
- :type d_end: str
:type btn_remove: int
:type btn_remove_all: int
:type href: str
"""
ctrl_panel = self.ControlPanel(cp_data)
-
- d_start = get_date(d_start)
- d_end = get_date(d_end)
+ norm = cl_normalize
# Parse the url:
parsed_url = url_decode(href)
+ if parsed_url:
+ url_params = parsed_url["params"]
+ else:
+ url_params = None
row_fig_tput = no_update
row_fig_lat = no_update
if trigger_id == "dd-ctrl-dut":
try:
- dut = self.spec_tbs[dd_dut]
- options = sorted(
- [{"label": v, "value": v}for v in dut.keys()],
- key=lambda d: d["label"]
- )
+ options = \
+ generate_options(sorted(self.spec_tbs[dd_dut].keys()))
disabled = False
except KeyError:
options = list()
try:
dut = ctrl_panel.get("dd-ctrl-dut-value")
phy = self.spec_tbs[dut][dd_phy]
- options = sorted(
- [{"label": label(v), "value": v} for v in phy.keys()],
- key=lambda d: d["label"]
- )
+ options = [{"label": label(v), "value": v} \
+ for v in sorted(phy.keys())]
disabled = False
except KeyError:
options = list()
dut = ctrl_panel.get("dd-ctrl-dut-value")
phy = ctrl_panel.get("dd-ctrl-phy-value")
area = self.spec_tbs[dut][phy][dd_area]
- options = sorted(
- [{"label": v, "value": v} for v in area.keys()],
- key=lambda d: d["label"]
- )
+ options = generate_options(sorted(area.keys()))
disabled = False
except KeyError:
options = list()
"cl-ctrl-testtype-all-options": C.CL_ALL_DISABLED,
})
elif trigger_id == "dd-ctrl-test":
- core_opts = list()
- framesize_opts = list()
- testtype_opts = list()
dut = ctrl_panel.get("dd-ctrl-dut-value")
phy = ctrl_panel.get("dd-ctrl-phy-value")
area = ctrl_panel.get("dd-ctrl-area-value")
- test = self.spec_tbs[dut][phy][area][dd_test]
- cores = test["core"]
- fsizes = test["frame-size"]
- ttypes = test["test-type"]
- if dut and phy and area and dd_test:
- core_opts = [{"label": v, "value": v}
- for v in sorted(cores)]
- framesize_opts = [{"label": v, "value": v}
- for v in sorted(fsizes)]
- testtype_opts = [{"label": v, "value": v}
- for v in sorted(ttypes)]
+ if all((dut, phy, area, dd_test, )):
+ test = self.spec_tbs[dut][phy][area][dd_test]
ctrl_panel.set({
"dd-ctrl-test-value": dd_test,
- "cl-ctrl-core-options": core_opts,
+ "cl-ctrl-core-options": \
+ generate_options(sorted(test["core"])),
"cl-ctrl-core-value": list(),
"cl-ctrl-core-all-value": list(),
"cl-ctrl-core-all-options": C.CL_ALL_ENABLED,
- "cl-ctrl-framesize-options": framesize_opts,
+ "cl-ctrl-framesize-options": \
+ generate_options(sorted(test["frame-size"])),
"cl-ctrl-framesize-value": list(),
"cl-ctrl-framesize-all-value": list(),
"cl-ctrl-framesize-all-options": C.CL_ALL_ENABLED,
- "cl-ctrl-testtype-options": testtype_opts,
+ "cl-ctrl-testtype-options": \
+ generate_options(sorted(test["test-type"])),
"cl-ctrl-testtype-value": list(),
"cl-ctrl-testtype-all-value": list(),
"cl-ctrl-testtype-all-options": C.CL_ALL_ENABLED,
new_store_sel.append(item)
store_sel = new_store_sel
elif trigger_id == "url":
- # TODO: Add verification
- url_params = parsed_url["params"]
if url_params:
- store_sel = literal_eval(
- url_params.get("store_sel", list())[0])
- d_start = get_date(url_params.get("start", list())[0])
- d_end = get_date(url_params.get("end", list())[0])
+ try:
+ store_sel = literal_eval(url_params["store_sel"][0])
+ norm = literal_eval(url_params["norm"][0])
+ except (KeyError, IndexError):
+ pass
if store_sel:
row_card_sel_tests = C.STYLE_ENABLED
row_btns_sel_tests = C.STYLE_ENABLED
-
- if trigger_id in ("btn-ctrl-add", "url", "dpr-period",
- "btn-sel-remove", "cl-ctrl-normalize"):
+ last_test = store_sel[-1]
+ test = self.spec_tbs[last_test["dut"]]\
+ [last_test["phy"]][last_test["area"]]\
+ [last_test["test"]]
+ ctrl_panel.set({
+ "dd-ctrl-dut-value": last_test["dut"],
+ "dd-ctrl-phy-value": last_test["phy"],
+ "dd-ctrl-phy-options": generate_options(sorted(
+ self.spec_tbs[last_test["dut"]].keys())),
+ "dd-ctrl-phy-disabled": False,
+ "dd-ctrl-area-value": last_test["area"],
+ "dd-ctrl-area-options": [
+ {"label": label(v), "value": v} \
+ for v in sorted(
+ self.spec_tbs[last_test["dut"]]\
+ [last_test["phy"]].keys())
+ ],
+ "dd-ctrl-area-disabled": False,
+ "dd-ctrl-test-value": last_test["test"],
+ "dd-ctrl-test-options": generate_options(sorted(
+ self.spec_tbs[last_test["dut"]]\
+ [last_test["phy"]]\
+ [last_test["area"]].keys())),
+ "dd-ctrl-test-disabled": False,
+ "cl-ctrl-core-options": generate_options(sorted(
+ test["core"])),
+ "cl-ctrl-core-value": [last_test["core"].upper(), ],
+ "cl-ctrl-core-all-value": list(),
+ "cl-ctrl-core-all-options": C.CL_ALL_ENABLED,
+ "cl-ctrl-framesize-options": generate_options(
+ sorted(test["frame-size"])),
+ "cl-ctrl-framesize-value": \
+ [last_test["framesize"].upper(), ],
+ "cl-ctrl-framesize-all-value": list(),
+ "cl-ctrl-framesize-all-options": C.CL_ALL_ENABLED,
+ "cl-ctrl-testtype-options": generate_options(sorted(
+ test["test-type"])),
+ "cl-ctrl-testtype-value": \
+ [last_test["testtype"].upper(), ],
+ "cl-ctrl-testtype-all-value": list(),
+ "cl-ctrl-testtype-all-options": C.CL_ALL_ENABLED
+ })
+
+ if trigger_id in ("btn-ctrl-add", "url", "btn-sel-remove",
+ "cl-ctrl-normalize"):
if store_sel:
row_fig_tput, row_fig_lat, row_btn_dwnld = \
_generate_plotting_area(
graph_trending(self.data, store_sel, self.layout,
- d_start, d_end, bool(cl_normalize)),
+ bool(norm)),
gen_new_url(
parsed_url,
{
"store_sel": store_sel,
- "start": d_start,
- "end": d_end
+ "norm": norm
}
)
)
disabled = True
ctrl_panel.set({
"btn-ctrl-add-disabled": disabled,
- "cl-normalize-value": cl_normalize
+ "cl-normalize-value": norm
})
ret_val = [
continue
df = pd.concat([df, sel_data], ignore_index=True)
- return dcc.send_data_frame(df.to_csv, "trending_data.csv")
+ return dcc.send_data_frame(df.to_csv, C.TREND_DOWNLOAD_FILE_NAME)