Object of type 'Input' has no len() errors for Jupyter lab

Hello,

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px


import pandas as pd

df = pd.read_csv('./gapminderDataFiveYear.csv')

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
server = app.server


app.layout = html.Div([
    dcc.Graph(id='graph-with-slider'),
    dcc.Slider(
        id='year-slider',
        min=df['year'].min(),
        max=df['year'].max(),
        value=df['year'].min(),
        marks={str(year): str(year) for year in df['year'].unique()},
        step=None
    )
])


@app.callback(
    Output('graph-with-slider', 'figure'),
    Input('year-slider', 'value'))
def update_figure(selected_year):
    
    filtered_df = df[df.year == selected_year]
    fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp",
                     size="pop", color="continent", hover_name="country",
                     log_x=True, size_max=55)

    fig.update_layout(transition_duration=500)

    return fig


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

The above codes runs well. However, I want to show the results inside the Jupyter lab by changing the code like this:

#external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
#app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
#server = app.server

from jupyter_plotly_dash import JupyterDash
app = JupyterDash('simpleCase')

#if __name__ == '__main__':
#    app.run_server(debug=True)
app

It reports the following errors:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-8103eeff17bc> in <module>
     36 @app.callback(
     37     Output('graph-with-slider', 'figure'),
---> 38     Input('year-slider', 'value'))
     39 def update_figure(selected_year):
     40     filtered_df = df[df.year == selected_year]

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django_plotly_dash/dash_wrapper.py in wrap_func(func)
    332             # if .expanded is None => inject all
    333             # if .expanded is a list => inject only
--> 334             func.expanded = DjangoDash.get_expanded_arguments(func, inputs, state)
    335             return func
    336         return wrap_func

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django_plotly_dash/dash_wrapper.py in get_expanded_arguments(func, inputs, state)
    292         It returns a list of the expanded parameters to inject (can be [] if nothing should be injected)
    293          or None if all parameters should be injected."""
--> 294         n_dash_parameters = len(inputs or []) + len(state or [])
    295 
    296         parameter_types = {kind: [p.name for p in parameters] for kind, parameters in

TypeError: object of type 'Input' has no len()

Could you help me with this problem? Thanks

Hi @jinbo

Try adding [ ] to your Input like:

[Input('year-slider', 'value')]