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 numpy as np
from bokeh.io import curdoc
from bokeh.layouts import column, row
from bokeh.models import (
BasicTicker,
@ -70,12 +71,19 @@ for (let i = 0; i < js_data.data['fname'].length; i++) {
def create():
doc = curdoc()
det_data = {}
fit_params = {}
js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""], ext=["", ""]))
def proposal_textinput_callback(_attr, _old, new):
proposal = new.strip()
def file_select_update_for_proposal():
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:
proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path):
@ -92,6 +100,11 @@ def create():
file_open_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.on_change("value", proposal_textinput_callback)
@ -150,6 +163,7 @@ def create():
def upload_button_callback(_attr, _old, new):
nonlocal det_data
det_data = []
proposal_textinput.value = ""
for f_str, f_name in zip(new, upload_button.filename):
with io.StringIO(base64.b64decode(f_str).decode()) as file:
base, ext = os.path.splitext(f_name)

View File

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

View File

@ -6,6 +6,7 @@ import tempfile
import types
import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import column, row
from bokeh.models import (
BasicTicker,
@ -75,12 +76,19 @@ def color_palette(n_colors):
def create():
doc = curdoc()
det_data = []
fit_params = {}
js_data = ColumnDataSource(data=dict(content=["", ""], fname=["", ""]))
def proposal_textinput_callback(_attr, _old, new):
proposal = new.strip()
def file_select_update_for_proposal():
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:
proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path):
@ -97,6 +105,11 @@ def create():
file_open_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.on_change("value", proposal_textinput_callback)
@ -160,6 +173,7 @@ def create():
def upload_button_callback(_attr, _old, new):
nonlocal det_data
det_data = []
proposal_textinput.value = ""
for f_str, f_name in zip(new, upload_button.filename):
with io.StringIO(base64.b64decode(f_str).decode()) as file:
base, ext = os.path.splitext(f_name)