def interventions_callback(ts, reset_clicks, add_intervention_clicks, rows, new_date, new_id, new_val): ctx = dash.callback_context is_reset = False changed = False if ctx.triggered: c_id = ctx.triggered[0]['prop_id'].split('.')[0] if reset_clicks is not None and c_id == 'interventions-reset-defaults': reset_variable('interventions') is_reset = True if add_intervention_clicks is not None and c_id == 'new-intervention-add': d = date.fromisoformat(new_date) sstart = date.fromisoformat(get_variable('start_date')) if d < sstart or d > sstart + timedelta( days=get_variable('simulation_days')): raise dash.exceptions.PreventUpdate() if new_id in ('test-all-with-symptoms', ): new_val = None elif new_id == ('test-with-contact-tracing', 'test-only-severe-symptoms'): if new_val > 100 or new_val < 0: raise dash.exceptions.PreventUpdate() elif new_id in ('limit-mobility', ): if new_val > 100 or new_val < 0: raise dash.exceptions.PreventUpdate() elif new_id in ('limit-mass-gatherings', 'import-infections', 'build-new-icu-units', 'build-new-hospital-beds'): if new_val < 0: raise dash.exceptions.PreventUpdate() else: raise dash.exceptions.PreventUpdate() changed = True rows.append(dict(name=new_id, date=d.isoformat(), value=new_val)) if c_id == 'interventions-table': changed = True if not is_reset and changed: ivs = [] for row in sorted(rows, key=lambda x: x['date']): val = row['value'] if isinstance(val, str): val = int(val) ivs.append([row['name'], row['date'], val]) set_variable('interventions', ivs) rows = interventions_to_rows() return rows
def disease_params_data_callback(ts, reset_clicks, rows): ctx = dash.callback_context if ctx.triggered: c_id = ctx.triggered[0]['prop_id'].split('.')[0] if reset_clicks is not None and c_id == 'disease-params-reset-defaults': for row in rows: reset_variable(row['id']) row['value'] = get_variable(row['id']) for row in rows: if not isinstance(row['value'], (int, float)): row['value'] = get_variable(row['id']) if row['value'] < 0: row['value'] = 0 elif row['value'] > 100: row['value'] = 100 set_variable(row['id'], float(row['value'])) return rows