+def _tpc_generate_html_table(header, data, output_file_name):
+ """Generate html table from input data with simple sorting possibility.
+
+ :param header: Table header.
+ :param data: Input data to be included in the table. It is a list of lists.
+ Inner lists are rows in the table. All inner lists must be of the same
+ length. The length of these lists must be the same as the length of the
+ header.
+ :param output_file_name: The name (relative or full path) where the
+ generated html table is written.
+ :type header: list
+ :type data: list of lists
+ :type output_file_name: str
+ """
+
+ df = pd.DataFrame(data, columns=header)
+
+ df_sorted = [df.sort_values(
+ by=[key, header[0]], ascending=[True, True]
+ if key != header[0] else [False, True]) for key in header]
+ df_sorted_rev = [df.sort_values(
+ by=[key, header[0]], ascending=[False, True]
+ if key != header[0] else [True, True]) for key in header]
+ df_sorted.extend(df_sorted_rev)
+
+ fill_color = [["#d4e4f7" if idx % 2 else "#e9f1fb"
+ for idx in range(len(df))]]
+ table_header = dict(
+ values=["<b>{item}</b>".format(item=item) for item in header],
+ fill_color="#7eade7",
+ align=["left", "center"]
+ )
+
+ fig = go.Figure()
+
+ for table in df_sorted:
+ columns = [table.get(col) for col in header]
+ fig.add_trace(
+ go.Table(
+ columnwidth=[30, 10],
+ header=table_header,
+ cells=dict(
+ values=columns,
+ fill_color=fill_color,
+ align=["left", "right"]
+ )
+ )
+ )
+
+ buttons = list()
+ menu_items = ["<b>{0}</b> (ascending)".format(itm) for itm in header]
+ menu_items_rev = ["<b>{0}</b> (descending)".format(itm) for itm in header]
+ menu_items.extend(menu_items_rev)
+ for idx, hdr in enumerate(menu_items):
+ visible = [False, ] * len(menu_items)
+ visible[idx] = True
+ buttons.append(
+ dict(
+ label=hdr.replace(" [Mpps]", ""),
+ method="update",
+ args=[{"visible": visible}],
+ )
+ )
+
+ fig.update_layout(
+ updatemenus=[
+ go.layout.Updatemenu(
+ type="dropdown",
+ direction="down",
+ x=0.03,
+ xanchor="left",
+ y=1.045,
+ yanchor="top",
+ active=len(menu_items) - 1,
+ buttons=list(buttons)
+ )
+ ],
+ annotations=[
+ go.layout.Annotation(
+ text="<b>Sort by:</b>",
+ x=0,
+ xref="paper",
+ y=1.035,
+ yref="paper",
+ align="left",
+ showarrow=False
+ )
+ ]
+ )
+
+ ploff.plot(fig, show_link=False, auto_open=False, filename=output_file_name)
+
+