1

I have a dash plotly python jupyter notebook app (music) that takes 5 rows as a sample from a bigger dataframe using df_sample= df.sample(5). It has a quiz with inputs to compare the response of the users with the df_sample and take points depending on the users response and the df_sample values.

When I test it locally the code works perfectly also when I run it locally through heroku local. But When I deploy to Heroku in production the code fail because df_sample will takes two differents set of values, when the app is updating during the callbacks and then comparison between the users response and the the df_sample dataframe fails.

example: df_sample('name')=('c','f', 'g', 'b', 'e')

when i use locally this is constant during the callbacks & every works fine

df_sample('name')=('c','f', 'g', 'b', 'e') df_sample('name')=('b','i', 'l', 'm', 'o')

when I deploy to heroku df_sample get 2 different set of vales during the callbacks and the app fails

here an extract of the code:


 Import requests
 Import pandas as pd
 Import dash
 from dash.dependencies import Input, Output
 Import dash_html_components as html
 Import dash_core_components as dcc
 from dash import Dash
 from dash import dcc
 from dash import html


 url1='url'
 download = github_session.get(url1).content 
 df_link = pd.read_csv(io.StringIO(download.decode('latin-1')), sep=";", 
 error_bad_lines=False, warn_bad_lines=False, encoding='latin-1')

 server = app.server

 df_sample=df_link.sample(5)
 df_sample.reset_index(inplace=True)

 compositors= dbc.Col(
                dcc.Dropdown(
                id="compositor",
                options=[
                {"label": str(i), "value": i} for i in autors
                ],
                value="",
                clearable=False,
                )
 dbc.Row(
        [
            dbc.Label("5-look The correct answer is:", 
                      width="auto"),
            dbc.Col(
                dbc.Input(id="name", value=compositor_result, type="text",size="lg")
               
            )
        ]
)

 dbc.Col(dbc.Button("4-Submmit & play next record", color="danger",
                           id="example-button", 
                           n_clicks=0)
                    
                   ),
 dbc.Col(
                dbc.Input(id="result", value=result, type="text",size="lg")
                
            )

 app.layout = ....

 @app.callback(
    
   
    Output("result", "value"),
    Output("compositor_result", "value"),
    Input('example-button', 'n_clicks'),
    State("compositor", "value"),

 def update_line_chart(n_clicks, compositor):
      global value1
      global df_sample
      if (n_clicks==None):
          raise prevent_update
      if df:_sample[n_clicks-1]==compositor: 
                result=value1+15
            else: value1=value1
      compositor_result=df_sample.name[n_click-1]
      return result, compositor_result

 if __name__ == '__main__':
      app.run_server(debug=True, use_reloader=False)

Thanks

0 Answers0