"""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