Auto refresh list of files in proposal folder

For #34
This commit is contained in:
usov_i 2021-07-05 16:45:44 +02:00
parent d6e599d4f9
commit b6d7a52b06
3 changed files with 43 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import tempfile
import types import types
import numpy as np import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import column, row from bokeh.layouts import column, row
from bokeh.models import ( from bokeh.models import (
BasicTicker, BasicTicker,
@ -70,12 +71,19 @@ for (let i = 0; i < js_data.data['fname'].length; i++) {
def create(): def create():
doc = curdoc()
det_data = {} det_data = {}
fit_params = {} fit_params = {}
js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""], ext=["", ""])) js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""], ext=["", ""]))
def proposal_textinput_callback(_attr, _old, new): def file_select_update_for_proposal():
proposal = new.strip() proposal = proposal_textinput.value.strip()
if not proposal:
file_select.options = []
file_open_button.disabled = True
file_append_button.disabled = True
return
for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS: for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS:
proposal_path = os.path.join(zebra_proposals_path, proposal) proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path): if os.path.isdir(proposal_path):
@ -92,6 +100,11 @@ def create():
file_open_button.disabled = False file_open_button.disabled = False
file_append_button.disabled = False file_append_button.disabled = False
doc.add_periodic_callback(file_select_update_for_proposal, 5000)
def proposal_textinput_callback(_attr, _old, _new):
file_select_update_for_proposal()
proposal_textinput = TextInput(title="Proposal number:", width=210) proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput.on_change("value", proposal_textinput_callback) proposal_textinput.on_change("value", proposal_textinput_callback)
@ -150,6 +163,7 @@ def create():
def upload_button_callback(_attr, _old, new): def upload_button_callback(_attr, _old, new):
nonlocal det_data nonlocal det_data
det_data = [] det_data = []
proposal_textinput.value = ""
for f_str, f_name in zip(new, upload_button.filename): for f_str, f_name in zip(new, upload_button.filename):
with io.StringIO(base64.b64decode(f_str).decode()) as file: with io.StringIO(base64.b64decode(f_str).decode()) as file:
base, ext = os.path.splitext(f_name) base, ext = os.path.splitext(f_name)

View File

@ -58,9 +58,11 @@ def create():
num_formatter = NumberFormatter(format="0.00", nan_format="") num_formatter = NumberFormatter(format="0.00", nan_format="")
def proposal_textinput_callback(_attr, _old, new): def file_select_update_for_proposal():
nonlocal cami_meta proposal = proposal_textinput.value.strip()
proposal = new.strip() if not proposal:
return
for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS: for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS:
proposal_path = os.path.join(zebra_proposals_path, proposal) proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path): if os.path.isdir(proposal_path):
@ -75,13 +77,19 @@ def create():
file_list.append((os.path.join(proposal_path, file), file)) file_list.append((os.path.join(proposal_path, file), file))
file_select.options = file_list file_select.options = file_list
doc.add_periodic_callback(file_select_update_for_proposal, 5000)
def proposal_textinput_callback(_attr, _old, _new):
nonlocal cami_meta
cami_meta = {} cami_meta = {}
file_select_update_for_proposal()
proposal_textinput = TextInput(title="Proposal number:", width=210) proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput.on_change("value", proposal_textinput_callback) proposal_textinput.on_change("value", proposal_textinput_callback)
def upload_button_callback(_attr, _old, new): def upload_button_callback(_attr, _old, new):
nonlocal cami_meta nonlocal cami_meta
proposal_textinput.value = ""
with io.StringIO(base64.b64decode(new).decode()) as file: with io.StringIO(base64.b64decode(new).decode()) as file:
cami_meta = pyzebra.parse_h5meta(file) cami_meta = pyzebra.parse_h5meta(file)
file_list = cami_meta["filelist"] file_list = cami_meta["filelist"]

View File

@ -6,6 +6,7 @@ import tempfile
import types import types
import numpy as np import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import column, row from bokeh.layouts import column, row
from bokeh.models import ( from bokeh.models import (
BasicTicker, BasicTicker,
@ -75,12 +76,19 @@ def color_palette(n_colors):
def create(): def create():
doc = curdoc()
det_data = [] det_data = []
fit_params = {} fit_params = {}
js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""])) js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""]))
def proposal_textinput_callback(_attr, _old, new): def file_select_update_for_proposal():
proposal = new.strip() proposal = proposal_textinput.value.strip()
if not proposal:
file_select.options = []
file_open_button.disabled = True
file_append_button.disabled = True
return
for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS: for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS:
proposal_path = os.path.join(zebra_proposals_path, proposal) proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path): if os.path.isdir(proposal_path):
@ -97,6 +105,11 @@ def create():
file_open_button.disabled = False file_open_button.disabled = False
file_append_button.disabled = False file_append_button.disabled = False
doc.add_periodic_callback(file_select_update_for_proposal, 5000)
def proposal_textinput_callback(_attr, _old, _new):
file_select_update_for_proposal()
proposal_textinput = TextInput(title="Proposal number:", width=210) proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput.on_change("value", proposal_textinput_callback) proposal_textinput.on_change("value", proposal_textinput_callback)
@ -160,6 +173,7 @@ def create():
def upload_button_callback(_attr, _old, new): def upload_button_callback(_attr, _old, new):
nonlocal det_data nonlocal det_data
det_data = [] det_data = []
proposal_textinput.value = ""
for f_str, f_name in zip(new, upload_button.filename): for f_str, f_name in zip(new, upload_button.filename):
with io.StringIO(base64.b64decode(f_str).decode()) as file: with io.StringIO(base64.b64decode(f_str).decode()) as file:
base, ext = os.path.splitext(f_name) base, ext = os.path.splitext(f_name)