feat: Add persistent error logging with copy and clear functionality
This commit is contained in:
parent
6a580785a8
commit
0c8ad4a8aa
@ -4,6 +4,7 @@ import logging
|
|||||||
import warnings
|
import warnings
|
||||||
import shutil
|
import shutil
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
from io import BytesIO
|
||||||
import tempfile
|
import tempfile
|
||||||
import zipfile
|
import zipfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@ -28,6 +29,10 @@ st.set_page_config(
|
|||||||
setup_logging()
|
setup_logging()
|
||||||
warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl.reader.workbook')
|
warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl.reader.workbook')
|
||||||
|
|
||||||
|
def add_to_error_log(error_dict, filepath, error):
|
||||||
|
"""Add error to the error dictionary with file path as key"""
|
||||||
|
error_dict[filepath] = str(error)
|
||||||
|
|
||||||
def save_uploaded_file(uploaded_file):
|
def save_uploaded_file(uploaded_file):
|
||||||
"""Save an uploaded file to a temporary location"""
|
"""Save an uploaded file to a temporary location"""
|
||||||
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(uploaded_file.name)[1]) as tmp_file:
|
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(uploaded_file.name)[1]) as tmp_file:
|
||||||
@ -247,7 +252,9 @@ if input_method == "Upload Files" and uploaded_files and st.button("Process File
|
|||||||
status_text.text(f"Processed {idx + 1} of {len(uploaded_files)} files")
|
status_text.text(f"Processed {idx + 1} of {len(uploaded_files)} files")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"❌ Error processing {uploaded_file.name}: {str(e)}")
|
error_msg = f"❌ Error processing {uploaded_file.name}: {str(e)}"
|
||||||
|
st.error(error_msg)
|
||||||
|
st.session_state.error_log[uploaded_file.name] = str(e)
|
||||||
|
|
||||||
if len(processed_files) > 1:
|
if len(processed_files) > 1:
|
||||||
zip_buffer = create_zip_file(processed_files)
|
zip_buffer = create_zip_file(processed_files)
|
||||||
@ -313,7 +320,9 @@ elif input_method == "Select Directory" and source_dir and dest_dir and st.butto
|
|||||||
status_text.text(f"Processed {files_processed} of {total_files} files")
|
status_text.text(f"Processed {files_processed} of {total_files} files")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"❌ Error processing {relative_path}: {str(e)}")
|
error_msg = f"❌ Error processing {relative_path}: {str(e)}"
|
||||||
|
st.error(error_msg)
|
||||||
|
st.session_state.error_log[source_path] = str(e)
|
||||||
|
|
||||||
# Copy all other files
|
# Copy all other files
|
||||||
with st.expander("Copying other files", expanded=True):
|
with st.expander("Copying other files", expanded=True):
|
||||||
@ -335,12 +344,39 @@ elif input_method == "Select Directory" and source_dir and dest_dir and st.butto
|
|||||||
status_text.text(f"Processed {files_processed} of {total_files} files")
|
status_text.text(f"Processed {files_processed} of {total_files} files")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"❌ Error copying {relative_path}: {str(e)}")
|
error_msg = f"❌ Error copying {relative_path}: {str(e)}"
|
||||||
|
st.error(error_msg)
|
||||||
|
st.session_state.error_log[source_path] = str(e)
|
||||||
|
|
||||||
st.success(f"✨ All files processed and saved to: {dest_dir}")
|
st.success(f"✨ All files processed and saved to: {dest_dir}")
|
||||||
if len(all_files) > 0:
|
if len(all_files) > 0:
|
||||||
st.info(f"📁 Copied {len(all_files)} additional files to maintain folder structure")
|
st.info(f"📁 Copied {len(all_files)} additional files to maintain folder structure")
|
||||||
|
|
||||||
|
# Error Log Section
|
||||||
|
st.markdown("---")
|
||||||
|
st.header("Error Log")
|
||||||
|
|
||||||
|
if 'error_log' not in st.session_state:
|
||||||
|
st.session_state.error_log = {}
|
||||||
|
|
||||||
|
# Display error log if there are errors
|
||||||
|
if st.session_state.error_log:
|
||||||
|
st.error("The following errors were encountered:")
|
||||||
|
error_text = "\n\n".join([f"File: {path}\nError: {error}" for path, error in st.session_state.error_log.items()])
|
||||||
|
st.text_area("Error Details", error_text, height=200)
|
||||||
|
|
||||||
|
# Add copy button
|
||||||
|
if st.button("Copy Error Log"):
|
||||||
|
st.write("Error log copied to clipboard!")
|
||||||
|
st.session_state.error_log_copied = error_text
|
||||||
|
|
||||||
|
# Add clear button
|
||||||
|
if st.button("Clear Error Log"):
|
||||||
|
st.session_state.error_log = {}
|
||||||
|
st.experimental_rerun()
|
||||||
|
else:
|
||||||
|
st.success("No errors encountered in current session")
|
||||||
|
|
||||||
# Footer
|
# Footer
|
||||||
st.sidebar.markdown("---")
|
st.sidebar.markdown("---")
|
||||||
st.sidebar.markdown("### Instructions")
|
st.sidebar.markdown("### Instructions")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user