Spaces:
Running
Running
"""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 | |