Restructured app for multiview, first working callback

This commit is contained in:
Colin Maudry
2022-01-29 19:45:10 +01:00
parent d6d081af5c
commit b67bf183f8
4 changed files with 51 additions and 26 deletions
+6
View File
@@ -0,0 +1,6 @@
import dash
import dash_bootstrap_components as dbc
app = dash.Dash("trackdechets-public-dash", title='DECP.info : statistiques',
external_stylesheets=[dbc.themes.GRID], suppress_callback_exceptions=True)
server = app.server
+30
View File
@@ -0,0 +1,30 @@
from dash import html, dcc
import plotly.io as pio
from os import getenv
from app import app
from dash.dependencies import Input, Output
from views import siret
pio.templates.default = "none"
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
html.Div(id='page-content')
])
@app.callback(Output('page-content', 'children'),
Input('url', 'pathname'))
def display_page(pathname):
if pathname.startswith('/siret/'):
return siret.layout
else:
return '404'
if __name__ == '__main__':
port = getenv('PORT', 8050)
# Scalingo requires 0.0.0.0 as host, instead of the default 127.0.0.1
app.run_server(debug=True, host='0.0.0.0', port=int(port))
View File
+15 -26
View File
@@ -1,12 +1,8 @@
import dash
from dash import html, dcc from dash import html, dcc
import dash_bootstrap_components as dbc import dash_bootstrap_components as dbc
import pandas as pd import pandas as pd
import plotly.io as pio from dash.dependencies import Input, Output
from os import getenv from app import app
app = dash.Dash("trackdechets-public-stats", title='DECP.info : statistiques', external_stylesheets=[dbc.themes.GRID])
pio.templates.default = "none"
SIRET = '20004525000012' SIRET = '20004525000012'
@@ -30,8 +26,18 @@ def fn(input_number) -> str:
return '{:,.0f}'.format(input_number).replace(',', ' ') return '{:,.0f}'.format(input_number).replace(',', ' ')
def generateYears(years: list) -> [dbc.Row]: layout = html.Div(id='stats')
result = []
@app.callback(Output('stats', 'children'),
Input('url', 'pathname'))
def generateYears(pathname) -> [dbc.Row]:
siret = pathname.split('/')[2]
print(siret)
years = ['2022', '2021', '2020']
result = [dbc.Row([
html.H2('Par année')
])]
for year in years: for year in years:
df_marches_year = df_marches[df_marches['anneeNotification'] == year] df_marches_year = df_marches[df_marches['anneeNotification'] == year]
df_attributions_year = df_attributions[df_attributions['anneeNotification'] == year] df_attributions_year = df_attributions[df_attributions['anneeNotification'] == year]
@@ -40,7 +46,7 @@ def generateYears(years: list) -> [dbc.Row]:
dbc.Row([ dbc.Row([
html.H3(year), html.H3(year),
html.A('Télécharger les données', href=f'https://decp.info/db/decp?_sort=rowid&dateNotification__' html.A('Télécharger les données', href=f'https://decp.info/db/decp?_sort=rowid&dateNotification__'
f'startswith={year}&acheteur.id__exact={SIRET}') f'startswith={year}&acheteur.id__exact={siret}')
]), ]),
dbc.Row([ dbc.Row([
dbc.Col([ dbc.Col([
@@ -57,20 +63,3 @@ def generateYears(years: list) -> [dbc.Row]:
]) ])
result.append(row) result.append(row)
return result return result
acheteur_years = generateYears(['2022', '2021', '2020'])
print(len(acheteur_years))
app.layout = html.Div(children=[
dbc.Row([
html.H2('Par année')
])
] + acheteur_years)
if __name__ == '__main__':
port = getenv('PORT', 8050)
# Scalingo requires 0.0.0.0 as host, instead of the default 127.0.0.1
app.run_server(debug=bool(getenv('DEVELOPMENT')), host='0.0.0.0', port=int(port))