Estoy usando dash para mi tablero y está implementado en AWS Elastic Beanstalk.
Hay un problema en Datepicker. Estoy usando max_date_allowed=dt.date(dt.now())
Entonces, el día que se implementó la aplicación, todo funcionó bien. Pero a partir del día siguiente, max_date_allowed se apega a la fecha, la aplicación se implementa y no podemos elegir una fecha más allá de la fecha en que se implementa la aplicación.
Vuelve a funcionar solo si elegimos en el entorno, reiniciar los servidores de aplicaciones desde el menú de acciones.
¿Cuál podría ser el problema aquí?
A continuación se muestra el fragmento del selector de fecha que utilizamos.
dcc.Tabs([ dcc.Tab(label='DDR by Date (Default DDR - Last Day)', value='tab-1', children=[ dcc.DatePickerSingle( id='my-date-picker-single', min_date_allowed=dt(2020, 1, 18), max_date_allowed=dt.date(dt.now()), initial_visible_month=dt.date(dt.now()), placeholder='Select a date', display_format='DD/MM/YYYY' ), html.Button(id='submit-button', n_clicks=0, children='Submit'), html.Div(id='output-container-date-picker-single') ]),Suponiendo que el fragmento de código sea parte de la definición del diseño de la aplicación, el comportamiento que ve es intencionado. Este código se ejecuta cuando se inicia la aplicación y, por lo tanto, dt.date(dt.now()) se evalúa solo en este momento.
Hay (al menos) dos formas comunes de lograr lo que quieres,
Envuelva su definición de diseño en una función y asigne la instancia de función como el diseño de la aplicación. El código sería algo como app.layout = make_my_layout_function . Al asignar una función, el código de diseño de la aplicación se evaluará cada vez que un usuario visite su página. Consulte más detalles en la documentación (desplácese hasta "Actualizaciones al cargar la página").
Asigne el valor predeterminado no estático, en su caso max_date_allowed , a través de una devolución de llamada. Dado que las devoluciones de llamada se ejecutan en la carga de la página (a menos que lo impida activamente), el valor se actualizará según lo previsto.
Mi enfoque para esto sería usar un intervalo
Establezca el intervalo para que se dispare cada hora y luego use una devolución de llamada para actualizar max_date_allowed
Adoptar este enfoque eliminará el requisito de que el usuario vuelva a cargar la página para actualizar
p.ej
@app.callback(Output("date-picker", "max_date_allowed"), [Input("interval_hours", "n_interval")]) def update_max_date_allowed(n): return dt.date(dt.now())