Plot and Dash: объект типа 'Response' не поддерживает сериализацию в формате JSON - PullRequest
0 голосов
/ 26 июня 2018

Я хочу создать панель инструментов, в которой большая часть контента (заголовки, графики и т. Д.) Зависит от основного ввода пользователя.

Поэтому я хочу создать много обратных вызовов, чтобы вывод зависел от ввода пользователя.

Но, похоже, это вызывает много ошибок. Текущий: «Объект типа« Ответ »не сериализуем в формате JSON» Но в целом я также ищу некоторые входные данные в моем коде.

################## 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']
                    },
            }
        }
    )

Спасибо большое! Я действительно застрял.

Примечание: ошибка возникает тогда, когда я впервые пытаюсь использовать выпадающее меню Полный возврат:

введите описание изображения здесь

 * 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 -

1 Ответ

0 голосов
/ 10 июля 2018

Вы не показываете, как выглядят ваши данные, во фрагменте кода не все переменные, которые вы вызываете, и есть некоторые синтаксические ошибки. Давайте начнем.

Flask используется в фоновом режиме, но вам не нужно беспокоиться об использовании Requests из flask или любого другого подобного модуля. Вы просто передаете HTML-элементы, а не что-то сериализуемое, как список. Во всех ваших обратных вызовах, если вы отправляете объекты с атрибутом children для div, он должен быть в списке. например html.H3('text here') ==> [html.H3('text here')].

Как я уже говорил ранее:

{'x': dict['perp' + str(input)]['x'], не имеет смысла. dict - это функция типа, поэтому она нуждается в скобках ( ), а не в скобках [ ]. Кроме того, 'perp' + str(input) не является парой ключ / значение, поэтому dict( ) все равно выдаст ошибку

Если вы сохранили переменную с именем dict НЕ ДЕЛАЙТЕ ЭТОГО. Это функция, и вы не хотите перезаписывать имя встроенных функций.

Вы даете двум элементам один и тот же идентификатор. Это приведет к ошибкам. У вас есть html.Div(id='action_header') и html.H3("Pick labels to identify clusters", id='action_header'). Это создаст цикл, который уничтожит ваше приложение.

Из того, что вы предоставили выше, я смог собрать этот код, который работает. Это должно быть близко к тому, что вам нужно.

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

Если вы собираетесь использовать тире, я бы предложил использовать trace = {'type':'scatter', ...} вместо импорта графических объектов. На самом деле это не имеет значения, но Dash отлично справляется со всеми задачами, поэтому вам не нужно использовать dict() и { } и использовать их другие подмодули. В Python также не принято использовать круглые скобки для операторов if.

# bad
if (x == 5):
    # do foo

# good
if x == 5:
    # do foo

прочитайте здесь для руководства по стилю. PEP8 также очень популярен. Руководства по стилю помогут вашему коду стать более читабельным и избавят вас от глупых ошибок.

Наконец, input на самом деле является функцией в Python, и вы не должны использовать ее в качестве переменной в ваших обратных вызовах. См. Документацию для input () . Вы не должны перезаписывать или использовать встроенные функции или переменные для имен ваших переменных или функций. Это запутает читателя и может вызвать ошибки в вашем коде.

...