ohmygaugh's picture
Add comprehensive upload debugging and 4-method file reading
63aefc7
import streamlit as st
import pandas as pd
import io
import traceback
st.set_page_config(page_title="Upload Debug Tool", layout="wide")
st.title("πŸ”§ File Upload Debug Tool")
st.markdown("""
This tool will help us diagnose the exact upload issue.
""")
# Initialize session state
if 'debug_info' not in st.session_state:
st.session_state.debug_info = []
def log_debug(message):
st.session_state.debug_info.append(message)
st.write(f"DEBUG: {message}")
st.sidebar.header("Upload Test")
# Simple file uploader
uploaded_file = st.sidebar.file_uploader(
"Test File Upload",
type=["csv"],
key="debug_uploader"
)
if uploaded_file is not None:
log_debug(f"File detected: {uploaded_file.name}")
log_debug(f"File size: {uploaded_file.size} bytes")
log_debug(f"File type: {uploaded_file.type}")
try:
# Test method 1: Direct read
log_debug("Attempting Method 1: Direct pd.read_csv()")
df1 = pd.read_csv(uploaded_file)
log_debug(f"SUCCESS Method 1: {len(df1)} rows, {len(df1.columns)} columns")
st.success("βœ… Method 1 (Direct read) WORKED!")
st.dataframe(df1.head())
except Exception as e:
log_debug(f"FAILED Method 1: {str(e)}")
st.error(f"❌ Method 1 failed: {str(e)}")
try:
# Test method 2: Reset and read as bytes
log_debug("Attempting Method 2: Read as bytes")
uploaded_file.seek(0) # Reset file pointer
bytes_data = uploaded_file.getvalue()
log_debug(f"Bytes data length: {len(bytes_data)}")
df2 = pd.read_csv(io.BytesIO(bytes_data))
log_debug(f"SUCCESS Method 2: {len(df2)} rows, {len(df2.columns)} columns")
st.success("βœ… Method 2 (Bytes read) WORKED!")
st.dataframe(df2.head())
except Exception as e2:
log_debug(f"FAILED Method 2: {str(e2)}")
st.error(f"❌ Method 2 failed: {str(e2)}")
try:
# Test method 3: Read as string
log_debug("Attempting Method 3: Read as string")
uploaded_file.seek(0)
string_data = uploaded_file.getvalue().decode("utf-8")
log_debug(f"String data length: {len(string_data)}")
df3 = pd.read_csv(io.StringIO(string_data))
log_debug(f"SUCCESS Method 3: {len(df3)} rows, {len(df3.columns)} columns")
st.success("βœ… Method 3 (String read) WORKED!")
st.dataframe(df3.head())
except Exception as e3:
log_debug(f"FAILED Method 3: {str(e3)}")
st.error(f"❌ Method 3 failed: {str(e3)}")
st.error("❌ ALL METHODS FAILED!")
# Show full traceback
st.code(traceback.format_exc())
else:
st.info("πŸ‘† Upload a CSV file to test different reading methods")
# Show debug log
if st.session_state.debug_info:
st.markdown("### Debug Log")
for i, msg in enumerate(st.session_state.debug_info):
st.text(f"{i+1}. {msg}")
# Clear debug log
if st.button("Clear Debug Log"):
st.session_state.debug_info = []
st.rerun()