Как получить доступ к cookie из функции обратного вызова в Dash от Plotly?

У меня есть простая функция обратного вызова Dash, например:

@app.callback(
    dash.dependencies.Output('test_output', 'children'),
    [dash.dependencies.Input('test_input', 'value')]):
def process(val):
    return html.Div('test')

А теперь я собираюсь установить куки. Как мы видим в исходном коде Dash, функция-оболочка создает обычный объект Flask Response с сериализованными возвращаемыми данными:

def wrap_func(func):
    def add_context(*args, **kwargs):

        output_value = func(*args, **kwargs)
        response = {
            'response': {
                'props': {
                    output.component_property: output_value
                }
            }
        }

        return flask.Response(
            json.dumps(response,
                       cls=plotly.utils.PlotlyJSONEncoder),
            mimetype='application/json'
        )

    self.callback_map[callback_id]['callback'] = add_context

    return add_context

Так что, если бы этот код был частью моего проекта, я бы использовал здесь Response.set_cookie.

Ситуация с сеансами кажется иной - я могу получать доступ к объектам сеанса и изменять их из обернутой функции, что приводит к изменению session cookie.

Как я могу установить и получить файлы cookie из обратного вызова Dash? Может быть, у Flask есть способ сделать это без прямого создания объекта Response?

ОБНОВЛЕНИЕ

Я создал проблему для этого: https://github.com/plotly/dash/issues/182

И запрос на добавление, чтобы добавить эту функциональность: https://github.com/plotly/dash/pull/183


person Oleh Rybalchenko    schedule 22.12.2017    source источник


Ответы (1)


Функциональность, которую вы ищете, была в конечном итоге объединена: https://github.com/plotly/dash/pull/623 (4 марта 2019 г.)

Их пример того, как установить куки, выглядит так:

@app.callback(Output('output', 'children'), [Input('input', 'value')])
def update_output(value):
    dash.callback_context.response.set_cookie(
        'dash cookie', value + ' - cookie')
    return value + ' - output'
person Chris    schedule 17.05.2019