UTI: PoC - Dash application for Trending
[csit.git] / resources / tools / dash / app / pal / trending / trending.py
1 # Copyright (c) 2022 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 """Instantiate the Trending Dash applocation.
15 """
16 import dash
17 from dash import dcc
18 from dash import html
19 from dash import dash_table
20 import numpy as np
21 import pandas as pd
22
23 from .data import create_dataframe
24 from .layout import Layout
25
26
27 def init_trending(server):
28     """Create a Plotly Dash dashboard.
29
30     :param server: Flask server.
31     :type server: Flask
32     :returns: Dash app server.
33     :rtype: Dash
34     """
35
36     dash_app = dash.Dash(
37         server=server,
38         routes_pathname_prefix=u"/trending/",
39         external_stylesheets=[
40             u"/static/dist/css/styles.css",
41             u"https://fonts.googleapis.com/css?family=Lato",
42         ],
43     )
44
45     # Load DataFrame
46     df = create_dataframe()
47
48     # Custom HTML layout
49     layout = Layout(
50         app=dash_app,
51         html_layout_file="pal/trending/html_layout.txt",
52         spec_file="pal/trending/spec_test_selection.yaml"
53     )
54     dash_app.index_string = layout.html_layout
55     dash_app.layout = layout.add_content()
56
57     return dash_app.server
58
59
60 def create_data_table(df):
61     """Create Dash datatable from Pandas DataFrame.
62
63     DEMO
64     """
65
66     table = dash_table.DataTable(
67         id=u"database-table",
68         columns=[{u"name": i, u"id": i} for i in df.columns],
69         data=df.to_dict(u"records"),
70         sort_action=u"native",
71         sort_mode=u"native",
72         page_size=10,
73     )
74     return table