Download raw data

a workaround I found for my case is to create the data on the fly while downloading client-side
here for example I want to download a grouped dataframe where the grouping field is chosen by a dropdown menu (selcol in the update function):

@app.callback(
    dash.dependencies.Output('download-chosen', 'href'),
    [dash.dependencies.Input('field-dropdown-download', 'value')])
def update_downloader(selcol):
    groupedf = dfdate.groupby([selcol])['anothercol'].agg(lambda x:len(x.unique())).reset_index()    
    csvString = groupedf[[selcol,'anothercol']].to_csv(index=False,encoding='utf-8')    
    csvString = "data:text/csv;charset=utf-8," + urllib.quote(csvString)
    return csvString

where what gets updated is a clickable download link

html.Div([
        html.Label('Choose category for grouping data:'),
        dcc.Dropdown(
            id='field-dropdown-download',
            options=[
                    {'label': 'antenna name', 'value': 'AntennaName'},
                    {'label': 'utsett sted', 'value': 'Utsett.sted'},
                    {'label': 'oppdrett', 'value': 'date'},
                    {'label': 'gruppe', 'value': 'Gruppe'}
            ],
            value='AntennaName'
        ),
    ],style={'font-family': myfont,'width': '20%'}),
    html.Div([
        html.A(children='' , id='download-chosen',download="rawdata-groupedbychosenfield.csv", href="",target="_blank"),        ]} 
    ),
12 Likes