From 2482746f14f16cc6fa221dafba1eb12f14ca3aca Mon Sep 17 00:00:00 2001 From: Ivan Usov Date: Wed, 20 Oct 2021 09:28:03 +0200 Subject: [PATCH] Fix for FileInput props not updating simultaneously --- pyzebra/app/panel_ccl_integrate.py | 16 ++++++++++------ pyzebra/app/panel_param_study.py | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/pyzebra/app/panel_ccl_integrate.py b/pyzebra/app/panel_ccl_integrate.py index 8d9cbb8..cd74506 100644 --- a/pyzebra/app/panel_ccl_integrate.py +++ b/pyzebra/app/panel_ccl_integrate.py @@ -151,10 +151,10 @@ def create(): file_append_button = Button(label="Append", width=100, disabled=True) file_append_button.on_click(file_append_button_callback) - def upload_button_callback(_attr, _old, new): + def upload_button_callback(_attr, _old, _new): nonlocal det_data det_data = [] - for f_str, f_name in zip(new, upload_button.filename): + for f_str, f_name in zip(upload_button.value, upload_button.filename): with io.StringIO(base64.b64decode(f_str).decode()) as file: base, ext = os.path.splitext(f_name) file_data = pyzebra.parse_1D(file, ext) @@ -173,10 +173,12 @@ def create(): upload_div = Div(text="or upload new .ccl/.dat files:", margin=(5, 5, 0, 5)) upload_button = FileInput(accept=".ccl,.dat", multiple=True, width=200) - upload_button.on_change("value", upload_button_callback) + # for on_change("value", ...) or on_change("filename", ...), + # see https://github.com/bokeh/bokeh/issues/11461 + upload_button.on_change("filename", upload_button_callback) - def append_upload_button_callback(_attr, _old, new): - for f_str, f_name in zip(new, append_upload_button.filename): + def append_upload_button_callback(_attr, _old, _new): + for f_str, f_name in zip(append_upload_button.value, append_upload_button.filename): with io.StringIO(base64.b64decode(f_str).decode()) as file: _, ext = os.path.splitext(f_name) file_data = pyzebra.parse_1D(file, ext) @@ -188,7 +190,9 @@ def create(): append_upload_div = Div(text="append extra files:", margin=(5, 5, 0, 5)) append_upload_button = FileInput(accept=".ccl,.dat", multiple=True, width=200, disabled=True) - append_upload_button.on_change("value", append_upload_button_callback) + # for on_change("value", ...) or on_change("filename", ...), + # see https://github.com/bokeh/bokeh/issues/11461 + append_upload_button.on_change("filename", append_upload_button_callback) def monitor_spinner_callback(_attr, old, new): if det_data: diff --git a/pyzebra/app/panel_param_study.py b/pyzebra/app/panel_param_study.py index 322fd99..dab3344 100644 --- a/pyzebra/app/panel_param_study.py +++ b/pyzebra/app/panel_param_study.py @@ -168,10 +168,10 @@ def create(): file_append_button = Button(label="Append", width=100, disabled=True) file_append_button.on_click(file_append_button_callback) - def upload_button_callback(_attr, _old, new): + def upload_button_callback(_attr, _old, _new): nonlocal det_data det_data = [] - for f_str, f_name in zip(new, upload_button.filename): + for f_str, f_name in zip(upload_button.value, upload_button.filename): with io.StringIO(base64.b64decode(f_str).decode()) as file: base, ext = os.path.splitext(f_name) file_data = pyzebra.parse_1D(file, ext) @@ -190,10 +190,12 @@ def create(): upload_div = Div(text="or upload new .ccl/.dat files:", margin=(5, 5, 0, 5)) upload_button = FileInput(accept=".ccl,.dat", multiple=True, width=200) - upload_button.on_change("value", upload_button_callback) + # for on_change("value", ...) or on_change("filename", ...), + # see https://github.com/bokeh/bokeh/issues/11461 + upload_button.on_change("filename", upload_button_callback) - def append_upload_button_callback(_attr, _old, new): - for f_str, f_name in zip(new, append_upload_button.filename): + def append_upload_button_callback(_attr, _old, _new): + for f_str, f_name in zip(append_upload_button.value, append_upload_button.filename): with io.StringIO(base64.b64decode(f_str).decode()) as file: _, ext = os.path.splitext(f_name) file_data = pyzebra.parse_1D(file, ext) @@ -205,7 +207,9 @@ def create(): append_upload_div = Div(text="append extra files:", margin=(5, 5, 0, 5)) append_upload_button = FileInput(accept=".ccl,.dat", multiple=True, width=200, disabled=True) - append_upload_button.on_change("value", append_upload_button_callback) + # for on_change("value", ...) or on_change("filename", ...), + # see https://github.com/bokeh/bokeh/issues/11461 + append_upload_button.on_change("filename", append_upload_button_callback) def monitor_spinner_callback(_attr, _old, new): if det_data: