mlbee / st_mlbee /fetch_upload.py
freemt
Bump version to 0.1.0a2
de6562c
"""Fetch upload and convert to list1/list2."""
# pylint: disable=too-many-locals, too-many-branches, too-many-statements
import streamlit as st
from logzero import logger
from streamlit import session_state as state
def fetch_upload():
"""Fetch upload and convert to list1/list2."""
src_fileio = b""
tgt_fileio = b""
with st.form(key="upload_in_form"):
_ = st.expander(f"{state.ns.beetype}: Pick two files", expanded=True)
with _:
col1, col2 = st.columns(2)
with col1:
src_fileio = st.file_uploader(
"Choose source file (utf8 txt)",
type=[
"txt",
],
key="src_text",
# accept_multiple_files=True,
# accept_multiple_files=False,
)
with col2:
tgt_fileio = st.file_uploader(
"Choose target file (utf8 txt)",
type=[
"txt",
],
key="tgt_text",
# accept_multiple_files=True,
)
submitted = st.form_submit_button("Submit")
# logger.debug(" len(src_fileio): %s", len(src_fileio))
# logger.debug(" len(tgt_fileio): %s", len(tgt_fileio))
filename1 = ""
if src_fileio:
logger.debug(" type(src_fileio): %s", type(src_fileio))
# for st.file_uploade accept_multiple_files=True
if isinstance(src_fileio, list):
logger.debug(" len(src_fileio): %s", len(src_fileio))
filenames = []
try:
filenames = [elm.name for elm in src_fileio] # type: ignore
except Exception as exc:
logger.error(exc)
logger.debug("src_fileio names: *%s*", filenames)
# state.ns.src_fileio = src_fileio
state.ns.src_file = src_fileio[-1].getvalue().decode()
state.ns.src_filename = src_fileio[-1].name
else:
logger.debug("src_fileio.name: [%s]", src_fileio.name)
filenames = [src_fileio.name]
logger.debug("src_fileio names: %s", filenames)
# state.ns.src_fileio = src_fileio
state.ns.src_file = src_fileio.getvalue().decode()
state.ns.src_filename = src_fileio.name
filename1 = state.ns.src_filename
filename2 = ""
if tgt_fileio:
if isinstance(tgt_fileio, list):
logger.warning("not set to handle multiple files")
logger.warning("set accept_multiple_files=False in the meantime")
else:
state.ns.tgt_file = tgt_fileio.getvalue().decode()
state.ns.tgt_filename = tgt_fileio.name
filename2 = tgt_fileio.name
# proceed when Submit is clicked
msg1 = ""
if filename1:
msg1 += f" file1 {filename1}"
msg2 = ""
if filename2:
msg2 += f" file2 {filename2}"
glue = ""
if filename1 and filename2:
glue = ", "
upload_placeholder = st.empty()
prefix = f" Upload submitted: {msg1}{glue}{msg2}"
upload_placeholder.write(prefix)
# st.write(f" Submitted upload: {msg1}{glue}{msg2}")
if not submitted:
return None
if not (filename1 or filename2):
# st.write("| no file uploaded")
upload_placeholder.write(f"{prefix} no file uploaded")
return None
if not filename1:
# st.write("| file1 not ready")
upload_placeholder.write(f"{prefix}, file1 not ready")
return None
if not filename2:
# st.write("| file2 not ready")
upload_placeholder.write(f"{prefix}, file2 not ready")
return None
try:
_ = state.ns.src_file.splitlines()
list1 = [elm.strip() for elm in _ if elm.strip()]
_ = state.ns.tgt_file.splitlines()
list2 = [elm.strip() for elm in _ if elm.strip()]
except Exception as exc:
logger.error(exc)
list1 = [""]
list2 = [""]
logger.debug("len(list1): %s, len(list2): %s", len(list1), len(list2))
state.ns.list1 = list1[:]
state.ns.list2 = list2[:]
state.ns.updated = True
logger.debug("state.ns.updated: %s", state.ns.updated)
return None