Reputation: 621
I want to build a Dashboard where most of the content (headers, graphs, etc.) are dependent on a main input from the user.
Therefore, I want to create many callbacks so that output is dependent on the user input.
But this seems to cause many errors. The current one is: "Object of type 'Response' is not JSON serializable" But more generally, I am also looking for some inputs on my code.
################## APP LAYOUT ##################
app.layout = html.Div(
#style={'backgroundColor': colors['background']},
children=[
html.H1('Dashboard for Visualisation',
style={
'textAlign': 'center',
'color': colors['text_black']
}),
# html.H3('Choose Analysis',
# style={
# 'textAlign': 'center',
# 'color': colors['text_black']
# }),
html.Div([
dcc.Dropdown(
id='main_dropdown',
options=[
{'label':'PCA', 'value':'PCA'},
{'label':'t-SNE', 'value':'t-SNE'}
]
)],
style={'width': '28%',
'display': 'inline-block',
'textAlign': 'center'}
),
html.Div(id='action_header'),
html.Div(id='action'),
html.Div(id='sub_action'),
html.Div(id='output_graph'),
dcc.Slider(
id='slider',
min=0,
max=55,
step=None,
value=20,
marks={
5:'5',
10:'10',
15:'15',
20:'20',
25:'25',
30:'30',
35:'35',
40:'40',
45:'45',
50:'50'
},
updatemode='drag'
)
#html.Div(id='slider_div')
])
################## CALLBACKS ##################
@app.callback(
Output(component_id='action_header', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_action_header(input):
if(input == 't-SNE'):
return html.H3("Pick labels to identify clusters",
id='action_header')
@app.callback(
Output(component_id='action', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_action_options(input):
if(input == 't-SNE'):
return dcc.Dropdown(id='gene-Dropdown',
options=[{'label': s, 'value': s}
for s in temp.keys()],
value=['IDH1','SomeGene1','SomeGene2'],
multi=True
)
@app.callback(
Output(component_id='sub_action', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_sub_action_options(input):
if (input == 't-SNE'):
return [
html.Label('Dimensions in plot'),
dcc.RadioItems(
options=[
{'label': '2D', 'value': '2'},
{'label': '3D', 'value': '3'},
],
value='2'
)
]
@app.callback(
Output(component_id='output_graph', component_property='children'),
[Input(component_id='slider', component_property='value')])
def update_graph(input): # Pull det correct dataframe
# Return graph
return dcc.Graph(
id='tsne_perplexity_plot',
figure={
'data': [
go.Scatter(
{'x': dict['perp' + str(input)]['x'],
'y': dict['perp' + str(input)]['y'],
'mode': 'markers',
'opacity': 0.7,
'marker' : {
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
}
}
)
],
'layout': {
'title': "Perplexity: " + str(input),
# 'plot_bgcolor': colors['background'],
#'paper_bgcolor': colors['background'],
'font': {
'color': colors['text']
},
}
}
)
Thank you so much! I am really stuck.
Note: the error happens then first time I try to use the dropdown menu Full traceback:
* Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)
127.0.0.1 - - [26/Jun/2018 14:55:55] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [26/Jun/2018 14:55:56] "GET /_dash-layout HTTP/1.1" 200 -
127.0.0.1 - - [26/Jun/2018 14:55:56] "GET /_dash-dependencies HTTP/1.1" 200 -
[2018-06-26 14:55:56,845] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:56] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 14:55:56,859] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:56] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 14:55:56,863] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:56] "POST /_dash-update-component HTTP/1.1" 500 -
127.0.0.1 - - [26/Jun/2018 14:55:56] "POST /_dash-update-component HTTP/1.1" 200 -
127.0.0.1 - - [26/Jun/2018 14:55:57] "GET /favicon.ico HTTP/1.1" 200 -
[2018-06-26 14:55:58,329] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:58] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 14:55:58,334] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:58] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 14:55:58,351] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 14:55:58] "POST /_dash-update-component HTTP/1.1" 500 -
Object of type 'Response' is not JSON serializable[2018-06-26 15:52:04,380] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 15:52:04] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 15:52:04,392] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 15:52:04] "POST /_dash-update-component HTTP/1.1" 500 -
[2018-06-26 15:52:04,402] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 558, in dispatch
return self.callback_map[target_id]['callback'](*args)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 515, in add_context
output_value = func(*args, **kwargs)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/dash/dash.py", line 526, in add_context
cls=plotly.utils.PlotlyJSONEncoder),
File "/Users/kimrants/anaconda3/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 161, in encode
encoded_o = super(PlotlyJSONEncoder, self).encode(o)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/Users/kimrants/anaconda3/lib/python3.6/site-packages/plotly/utils.py", line 229, in default
return _json.JSONEncoder.default(self, obj)
File "/Users/kimrants/anaconda3/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'Response' is not JSON serializable
127.0.0.1 - - [26/Jun/2018 15:52:04] "POST /_dash-update-component HTTP/1.1" 500 -
Upvotes: 4
Views: 8720
Reputation: 2298
You don't show what your data looks like, you code snippet doesn't have all of your variables you call and there are some syntax errors. Let's get started.
Flask is the being using in the background but you do not need to worry about using Requests
from flask
or any other similar module. You're just passing html elements and not something serializable like a list. In all of your callbacks, if you are sending objects to the children
attribute of a div
it needs to be in a list. e.g. html.H3('text here')
==> [html.H3('text here')]
.
As I commented earlier:
{'x': dict['perp' + str(input)]['x']
, doesn't make sense. dict is a type function so it needs parenthesis( )
not brackets[ ]
. Also,'perp' + str(input)
is not a key/value pair sodict( )
will still throw an error
If you saved a variable with the name dict
DO NOT DO THAT. It's a function and you don't want to overwrite the name of built-in functions.
You give two elements the same ID. This will cause errors. You have html.Div(id='action_header')
and html.H3("Pick labels to identify clusters", id='action_header')
. This will create a loop that will destroy your application.
From what you provided above I was able to put this code together that works. It should be close to what you need.
import dash
import plotly.graph_objs as go
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
# I added these to make your code work. change to your variables.
app = dash.Dash()
server = app.server
temp = {'IDH1':1,'SomeGene1':2,'SomeGene2':3, "option3":4, "another":5}
colors = {'text':"#666", 'text_black':'#000000'}
################## APP LAYOUT ##################
app.layout = html.Div(
children=[
html.H1('Dashboard for Visualisation',
style={
'textAlign': 'center',
'color': colors['text_black']
}),
html.Div([
dcc.Dropdown(
id='main_dropdown',
options=[
{'label':'PCA', 'value':'PCA'},
{'label':'t-SNE', 'value':'t-SNE'}
]
)],
style={'width': '28%',
'display': 'inline-block',
'textAlign': 'center'}
),
html.Div(id='action_header'),
html.Div(id='action'),
html.Div(id='sub_action'),
html.Div(id='output_graph'),
dcc.Slider(
id='slider',
min=0,
max=55,
step=None,
value=20,
marks={
5:'5',
10:'10',
15:'15',
20:'20',
25:'25',
30:'30',
35:'35',
40:'40',
45:'45',
50:'50'
},
updatemode='drag'
)
])
################## CALLBACKS ##################
@app.callback(
Output(component_id='action_header', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_action_header(input):
if(input == 't-SNE'):
return [html.H3("Pick labels to identify clusters")]
@app.callback(
Output(component_id='action', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_action_options(input):
if(input == 't-SNE'):
return [dcc.Dropdown(id='gene-Dropdown',
options=[{'label': s, 'value': s}
for s in temp.keys()], # what is temp? not defined so I made something up.
value=['IDH1','SomeGene1','SomeGene2'],
multi=True
)]
@app.callback(
Output(component_id='sub_action', component_property='children'),
[Input(component_id='main_dropdown', component_property='value')])
def update_sub_action_options(input):
if (input == 't-SNE'):
return [
html.Label('Dimensions in plot'),
dcc.RadioItems(
options=[
{'label': '2D', 'value': '2'},
{'label': '3D', 'value': '3'},
],
value='2'
)
]
@app.callback(
Output(component_id='output_graph', component_property='children'),
[Input(component_id='slider', component_property='value')])
def update_graph(input): # Pull det correct dataframe
# Return graph
return [dcc.Graph(
id='tsne_perplexity_plot',
figure={
'data': [
go.Scatter(
{'x': [1, 2, 3], # put random in because I didn't
'y': [4, 8, 1], # know what your data looks like
'mode': 'markers',
'opacity': 0.7,
'marker' : {
'size': 15,
'line': {'width': 0.5, 'color': 'white'}
}
}
)
],
'layout': {
'title': "Perplexity: "+str(input),
'font': {
'color': colors['text']
},
}
}
)]
if __name__ == '__main__':
"""
If this file is ran by command line it will start the flask server
"""
app.run_server(debug = False, port = 8050) # Set debug = True when developing
If you are going to use dash I would suggest using trace = {'type':'scatter', ...}
instead of import graph objects. It doesn't really matter but Dash does a nice job of wrapping everything together so you don't have to use dict()
and { }
and use their other sub-modules. It's also common in Python to not use parentheses on you if statements.
# bad
if (x == 5):
# do foo
# good
if x == 5:
# do foo
read here for style guidelines. PEP8 is also very popular. Style guides will help your code become more readable and keep you from making silly mistakes.
Finally, input
is actually a function in python and you should not use it as a variable in you callbacks. See documentation for input(). You should not overwrite or use built-in functions or variables for names of your variables or functions. It will confuse the reader and could cause errors in your code.
Upvotes: 4