использование import_app из dash.тестирование приводит к дублированию обратного вывода

#python #flask #pytest #plotly-dash

#python #flask #пытест #plotly-dash

Вопрос:

У меня есть приложение plotly dash, определенное в 2 файлах:

app.py

 from flask import Flask
import dash
import dash_bootstrap_components as dbc

server = Flask(__name__)

app = dash.Dash(name='MYAPP', external_stylesheets=[dbc.themes.BOOTSTRAP])
app.title = 'MYAPP'
app.config.suppress_callback_exceptions = True
 

index.py

 import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from flask import session

from app import app

srv = app.server

app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content'),
])

@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname'),
               Input('url', 'hash'),])
def display_page(p_pathname, p_hash):
    # Some logic to serve different pages 
    # (...)

if __name__ == '__main__':
    app.run_server(processes=1, debug=True, threaded=True)

 

Теперь, когда я пытаюсь запустить более одного теста с использованием import_app,

teststest_something.py

 from dash.testing.application_runners import import_app

def test_scenario_1(dash_duo):
     app = import_app('index')
     dash_duo.start_server(app)

     dash_duo.wait_for_element_by_id('page-content', timeout=30)

     # do some tests (...)

def test_scenario_2(dash_duo):
     app = import_app('index')
     dash_duo.start_server(app)

     # do other tests (...)
 

Я получаю сообщение об ошибке в сценарии 2:

 dash.exceptions.DuplicateCallbackOutput: 
You have already assigned a callback to the output
with ID "page-content" and property "children". An output can only have
a single callback function. Try combining your inputs and
callback functions together into one function.
 

Как запустить эти два сценария без ошибок? Является ли это правильным подходом для нескольких тестов приложения Plotly Dash?

Комментарии:

1. Что такое dash_duo?

2. Это плохо документировано. Основную информацию можно найти здесь: dash.plotly.com/testing Как я понимаю, это своего рода приспособление (одно из двух), которое поддерживает графические варианты тестирования Dash: — dash_duo запускает сам сервер flask, в то время как — dash_br предполагает, что у нас уже есть рабочий сервер, указанный в URL. Я хотел, чтобы тесты были «независимыми» от любого сервера.

3. Вы решили эту проблему? В таком случае как?

4. Нет, мы перешли на django…