Unify proposal id for all tabs

For #36
This commit is contained in:
usov_i 2021-08-24 18:05:59 +02:00
parent 5de09d16ca
commit abf4750030
5 changed files with 93 additions and 58 deletions

View File

@ -4,7 +4,7 @@ from io import StringIO
from bokeh.io import curdoc
from bokeh.layouts import column, row
from bokeh.models import Tabs, TextAreaInput
from bokeh.models import Panel, Tabs, TextAreaInput, TextInput
import panel_ccl_integrate
import panel_hdf_anatric
@ -13,7 +13,6 @@ import panel_hdf_viewer
import panel_param_study
import panel_spind
doc = curdoc()
sys.stdout = StringIO()
@ -26,11 +25,15 @@ bokeh_logger = logging.getLogger("bokeh")
bokeh_logger.addHandler(bokeh_handler)
bokeh_log_textareainput = TextAreaInput(title="server output:", height=150)
proposal_textinput = TextInput(title="Proposal number:", width=210)
doc.proposal_textinput = proposal_textinput
# Final layout
doc.add_root(
column(
Tabs(
tabs=[
Panel(child=proposal_textinput, title="user config"),
panel_hdf_viewer.create(),
panel_hdf_anatric.create(),
panel_ccl_integrate.create(),

View File

@ -105,7 +105,7 @@ def create():
def proposal_textinput_callback(_attr, _old, _new):
file_select_update_for_proposal()
proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput = doc.proposal_textinput
proposal_textinput.on_change("value", proposal_textinput_callback)
def _init_datatable():
@ -163,7 +163,6 @@ 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)
@ -598,7 +597,6 @@ def create():
)
import_layout = column(
proposal_textinput,
file_select,
row(file_open_button, file_append_button),
upload_div,

View File

@ -56,42 +56,60 @@ def create():
num_formatter = NumberFormatter(format="0.00", nan_format="")
def file_select_update_for_proposal():
proposal = proposal_textinput.value.strip()
if not proposal:
return
def file_select_update():
if data_source.value == "proposal number":
proposal = proposal_textinput.value.strip()
if not proposal:
file_select.options = []
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):
# found it
break
else:
raise ValueError(f"Can not find data for proposal '{proposal}'.")
for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS:
proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path):
# found it
break
else:
raise ValueError(f"Can not find data for proposal '{proposal}'.")
file_list = []
for file in os.listdir(proposal_path):
if file.endswith(".hdf"):
file_list.append((os.path.join(proposal_path, file), file))
file_select.options = file_list
file_list = []
for file in os.listdir(proposal_path):
if file.endswith(".hdf"):
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)
else: # "cami file"
if not cami_meta:
file_select.options = []
return
file_list = cami_meta["filelist"]
file_select.options = [(entry, os.path.basename(entry)) for entry in file_list]
def data_source_callback(_attr, _old, _new):
file_select_update()
data_source = Select(
title="Data Source:",
value="proposal number",
options=["proposal number", "cami file"],
width=210,
)
data_source.on_change("value", data_source_callback)
doc.add_periodic_callback(file_select_update, 5000)
def proposal_textinput_callback(_attr, _old, _new):
nonlocal cami_meta
cami_meta = {}
file_select_update_for_proposal()
file_select_update()
proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput = doc.proposal_textinput
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"]
file_select.options = [(entry, os.path.basename(entry)) for entry in file_list]
data_source.value = "cami file"
file_select_update()
upload_div = Div(text="or upload .cami file:", margin=(5, 5, 0, 5))
upload_button = FileInput(accept=".cami", width=200)
@ -603,7 +621,7 @@ def create():
# Final layout
import_layout = column(
proposal_textinput,
data_source,
upload_div,
upload_button,
file_select,

View File

@ -59,42 +59,60 @@ def create():
num_formatter = NumberFormatter(format="0.00", nan_format="")
def file_select_update_for_proposal():
proposal = proposal_textinput.value.strip()
if not proposal:
return
def file_select_update():
if data_source.value == "proposal number":
proposal = proposal_textinput.value.strip()
if not proposal:
file_select.options = []
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):
# found it
break
else:
raise ValueError(f"Can not find data for proposal '{proposal}'.")
for zebra_proposals_path in pyzebra.ZEBRA_PROPOSALS_PATHS:
proposal_path = os.path.join(zebra_proposals_path, proposal)
if os.path.isdir(proposal_path):
# found it
break
else:
raise ValueError(f"Can not find data for proposal '{proposal}'.")
file_list = []
for file in os.listdir(proposal_path):
if file.endswith(".hdf"):
file_list.append((os.path.join(proposal_path, file), file))
file_select.options = file_list
file_list = []
for file in os.listdir(proposal_path):
if file.endswith(".hdf"):
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)
else: # "cami file"
if not cami_meta:
file_select.options = []
return
file_list = cami_meta["filelist"]
file_select.options = [(entry, os.path.basename(entry)) for entry in file_list]
def data_source_callback(_attr, _old, _new):
file_select_update()
data_source = Select(
title="Data Source:",
value="proposal number",
options=["proposal number", "cami file"],
width=210,
)
data_source.on_change("value", data_source_callback)
doc.add_periodic_callback(file_select_update, 5000)
def proposal_textinput_callback(_attr, _old, _new):
nonlocal cami_meta
cami_meta = {}
file_select_update_for_proposal()
file_select_update()
proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput = doc.proposal_textinput
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"]
file_select.options = [(entry, os.path.basename(entry)) for entry in file_list]
data_source.value = "cami file"
file_select_update()
upload_div = Div(text="or upload .cami file:", margin=(5, 5, 0, 5))
upload_button = FileInput(accept=".cami", width=200)
@ -731,7 +749,7 @@ def create():
)
# Final layout
import_layout = column(proposal_textinput, upload_div, upload_button, file_select)
import_layout = column(data_source, upload_div, upload_button, file_select)
layout_image = column(gridplot([[proj_v, None], [plot, proj_h]], merge_tools=False))
colormap_layout = column(
colormap,

View File

@ -115,7 +115,7 @@ def create():
def proposal_textinput_callback(_attr, _old, _new):
file_select_update_for_proposal()
proposal_textinput = TextInput(title="Proposal number:", width=210)
proposal_textinput = doc.proposal_textinput
proposal_textinput.on_change("value", proposal_textinput_callback)
def _init_datatable():
@ -178,7 +178,6 @@ 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)
@ -748,7 +747,6 @@ def create():
scan_layout = column(scan_table, row(monitor_spinner, scan_motor_select, param_select))
import_layout = column(
proposal_textinput,
file_select,
row(file_open_button, file_append_button),
upload_div,