Spaces:
Sleeping
Sleeping
Upload 2 files
Browse files- app.py +24 -0
- requirements.txt +44 -0
app.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from dash import Dash, html, dcc
|
2 |
+
import dash
|
3 |
+
import os
|
4 |
+
|
5 |
+
os.environ['suppress_callback_exceptions'] = 'True'
|
6 |
+
|
7 |
+
app = Dash(__name__, use_pages=True)
|
8 |
+
|
9 |
+
button_style = {'background-color': 'darkorange', 'color': 'white', 'fontWeight': 'bold', 'fontFamily': 'Arial, Helvetica, sans-serif', 'border': '0px', 'border-radius': '5%', 'padding': '5px', 'margin': '5px'}
|
10 |
+
|
11 |
+
pages = {}
|
12 |
+
for page in dash.page_registry.values():
|
13 |
+
pages[page['name']] = page['relative_path']
|
14 |
+
|
15 |
+
app.layout = html.Div([
|
16 |
+
html.Div([html.Label('HIERARCHICAL STOCK OVERVIEW', style={'fontWeight': 'bold', 'fontFamily': 'Arial, Helvetica, sans-serif', 'color': 'darkorange', 'fontSize': 18})], style={'display': 'inline-block'}),
|
17 |
+
html.Div([dcc.Link(html.Button(list(pages.keys())[0].title(), style=button_style), href=list(pages.values())[0])], style={'display': 'inline-block', 'margin-left': '900px'}),
|
18 |
+
html.Div([dcc.Link(html.Button(list(pages.keys())[1].title(), style=button_style), href=list(pages.values())[1])], style={'display': 'inline-block', 'margin-left': '20px'}),
|
19 |
+
html.Div([dcc.Link(html.Button(list(pages.keys())[2].title(), style=button_style), href=list(pages.values())[2])], style={'display': 'inline-block', 'margin-left': '20px'}),
|
20 |
+
dash.page_container
|
21 |
+
])
|
22 |
+
|
23 |
+
if __name__ == '__main__':
|
24 |
+
app.run_server(debug=True, host='0.0.0.0')
|
requirements.txt
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
beautifulsoup4==4.12.3
|
2 |
+
blinker==1.9.0
|
3 |
+
certifi==2024.12.14
|
4 |
+
charset-normalizer==3.4.0
|
5 |
+
click==8.1.7
|
6 |
+
countryinfo==0.1.2
|
7 |
+
dash==2.18.2
|
8 |
+
dash-core-components==2.0.0
|
9 |
+
dash-html-components==2.0.0
|
10 |
+
dash-table==5.0.0
|
11 |
+
emoji-country-flag==2.0.1
|
12 |
+
Flask==3.0.3
|
13 |
+
frozendict==2.4.6
|
14 |
+
html5lib==1.1
|
15 |
+
idna==3.10
|
16 |
+
importlib_metadata==8.5.0
|
17 |
+
itsdangerous==2.2.0
|
18 |
+
Jinja2==3.1.4
|
19 |
+
lxml==5.3.0
|
20 |
+
MarkupSafe==3.0.2
|
21 |
+
multitasking==0.0.11
|
22 |
+
nest-asyncio==1.6.0
|
23 |
+
numpy==2.2.0
|
24 |
+
packaging==24.2
|
25 |
+
pandas==2.2.3
|
26 |
+
peewee==3.17.8
|
27 |
+
platformdirs==4.3.6
|
28 |
+
plotly==5.24.1
|
29 |
+
python-dateutil==2.9.0.post0
|
30 |
+
pytz==2024.2
|
31 |
+
requests==2.32.3
|
32 |
+
retrying==1.3.4
|
33 |
+
setuptools==75.6.0
|
34 |
+
six==1.17.0
|
35 |
+
soupsieve==2.6
|
36 |
+
stocksymbol==0.0.5
|
37 |
+
tenacity==9.0.0
|
38 |
+
typing_extensions==4.12.2
|
39 |
+
tzdata==2024.2
|
40 |
+
urllib3==2.2.3
|
41 |
+
webencodings==0.5.1
|
42 |
+
Werkzeug==3.0.6
|
43 |
+
yfinance==0.2.50
|
44 |
+
zipp==3.21.0
|