From cacedd5893689d7651f3a9b3e633e1a6eff9d917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20David=20M=C3=BCller?= Date: Sat, 13 Apr 2024 09:33:38 +0200 Subject: [PATCH] zip only on demand --- pages/FLASHDeconvDownload.py | 47 ++++++++++++++++++------------------ src/Workflow.py | 16 ------------ 2 files changed, 23 insertions(+), 40 deletions(-) diff --git a/pages/FLASHDeconvDownload.py b/pages/FLASHDeconvDownload.py index e0161fe0..6be2db35 100644 --- a/pages/FLASHDeconvDownload.py +++ b/pages/FLASHDeconvDownload.py @@ -1,6 +1,6 @@ import streamlit as st -from os.path import join, exists, dirname, isfile +from os.path import join, exists, dirname, isfile, basename from os import listdir from src.common import page_setup @@ -16,10 +16,7 @@ def content(): if exists(dirpath): directories = sorted( - [ - entry for entry in listdir(dirpath) - if isfile(join(dirpath, entry, 'output.zip')) - ] + [entry for entry in listdir(dirpath) if not isfile(entry)] ) else: directories = [] @@ -33,31 +30,33 @@ def content(): columns[0].write('**Run**') columns[1].write('**Download**') - # if 'FLASHDeconvButtons' not in st.session_state: - # all_buttons = {} - # for directory in directories: - # all_buttons[directory] = False - # st.session_state['FLASHDeconvButtons'] = all_buttons - # Table Body for i, directory in enumerate(directories): st.divider() columns = st.columns((0.4, 0.6)) columns[0].empty().write(directory) - button_placeholder = columns[1].empty() - - # if st.session_state['FLASHDeconvButtons'][directory]: - - clicked = button_placeholder.button('Prepare Download', key=i) - if clicked: - button_placeholder.empty() - with st.spinner(): - with open(join(dirpath, directory, 'output.zip'), 'rb') as f: - button_placeholder.download_button( - "Download ⬇️", f, - file_name = f'{directory}.zip' - ) + with columns[1]: + button_placeholder = st.empty() + + clicked = button_placeholder.button('Prepare Download', key=i) + if clicked: + button_placeholder.empty() + with st.spinner(): + out_zip = join(dirpath, directory, 'output.zip') + if not exists(out_zip): + with ZipFile(out_zip, 'w', ZIP_DEFLATED) as zip_file: + for output in listdir(join(dirpath, directory)): + try: + with open(join(dirpath, directory, output), 'r') as f: + zip_file.writestr(basename(output), f.read()) + except: + continue + with open(out_zip, 'rb') as f: + button_placeholder.download_button( + "Download ⬇️", f, + file_name = f'{directory}.zip' + ) if __name__ == "__main__": content() diff --git a/src/Workflow.py b/src/Workflow.py index 7814ca3c..0fac6ece 100644 --- a/src/Workflow.py +++ b/src/Workflow.py @@ -389,19 +389,3 @@ def execution(self) -> None: 'out_feature2' : [out_feature2], } ) - - self.logger.log(f"Creating zip file for {file_name}...") - - out_zip = join(folder_path, 'output.zip') - with ZipFile(out_zip, 'w', ZIP_DEFLATED) as zip_file: - for output in all_outputs: - - if not exists(output): - continue - - with open(output, 'r') as f: - zip_file.writestr(basename(output), f.read()) - - def pp(self) -> None: - if 'FLASHDeconvButtons' in st.session_state: - del st.session_state['FLASHDeconvButtons'] \ No newline at end of file