fix: resolve pointer exhaustion on upload rerun and TypeError float len on PDF export
This commit is contained in:
@@ -262,29 +262,35 @@ uploaded_file = st.sidebar.file_uploader(
|
||||
|
||||
if uploaded_file is not None:
|
||||
try:
|
||||
# Read content and compute hash for deduplication logic
|
||||
file_bytes = uploaded_file.read()
|
||||
# getvalue() reads the whole stream without pointer exhaustion across script reruns
|
||||
file_bytes = uploaded_file.getvalue()
|
||||
file_hash = compute_hash(file_bytes)
|
||||
|
||||
# Check if already processed in database
|
||||
is_processed = db.is_file_processed(file_hash)
|
||||
|
||||
# Parse CSV
|
||||
df_parsed = parse_nbu_csv(file_bytes)
|
||||
|
||||
if not df_parsed.empty:
|
||||
# Perform SQLite UPSERT operation for each parsed job
|
||||
db.save_jobs(df_parsed)
|
||||
# Only process if this file hash was not just processed in this session
|
||||
if st.session_state.get('last_processed_file') != file_hash:
|
||||
# Check historical database logs
|
||||
is_processed = db.is_file_processed(file_hash)
|
||||
|
||||
if not is_processed:
|
||||
# Parse CSV
|
||||
df_parsed = parse_nbu_csv(file_bytes)
|
||||
|
||||
if not df_parsed.empty:
|
||||
# Perform SQLite UPSERT
|
||||
db.save_jobs(df_parsed)
|
||||
|
||||
# Mark processed in DB and session state
|
||||
db.mark_file_processed(file_hash, uploaded_file.name)
|
||||
st.toast(f"Relatório '{uploaded_file.name}' importado e sincronizado no banco!", icon="✅")
|
||||
st.session_state['last_processed_file'] = file_hash
|
||||
|
||||
if not is_processed:
|
||||
st.toast(f"Relatório '{uploaded_file.name}' importado e sincronizado no banco!", icon="✅")
|
||||
else:
|
||||
st.toast(f"Dados do relatório '{uploaded_file.name}' atualizados!", icon="🔄")
|
||||
|
||||
time.sleep(0.6)
|
||||
st.rerun()
|
||||
else:
|
||||
st.info(f"O relatório '{uploaded_file.name}' já foi importado anteriormente. Os dados foram atualizados no banco.")
|
||||
st.rerun()
|
||||
else:
|
||||
st.error("O arquivo fornecido está vazio ou mal formatado.")
|
||||
|
||||
st.error("O arquivo fornecido está vazio ou mal formatado.")
|
||||
except Exception as e:
|
||||
st.error(f"Erro ao processar arquivo: {str(e)}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user