import streamlit as st from backend.adapters.snowflake import get_current_user_name, get_session, resolve_env from backend.actions.bulk_delete import ( bulk_delete_emails_from_csv, parse_emails_from_csv, ) from backend.permissions import require_access session = get_session() require_access(session, "BULK_DELETE") st.title("Bulk Delete") st.markdown( """ Upload a CSV file containing a list of emails to be deleted. The CSV must have a header row; the first column will be used as the email column. Total of 100 000 emails are supported in one upload. NB! - all activities will be logged! """ ) uploaded_file = st.file_uploader("Choose a CSV file", type=["csv"]) if uploaded_file is not None: emails, errors = parse_emails_from_csv(uploaded_file) uploaded_file.seek(0) if errors: st.error( f"CSV has {len(errors)} validation error(s). Fix all errors before deleting." ) st.dataframe({"Validation Errors": errors}, width="content") else: st.info(f"{len(emails):,} email(s) will be submitted for deletion.") if st.button("Bulk Delete"): if uploaded_file is None: st.warning("Please upload a CSV file first.") else: session = get_session() user = get_current_user_name(session) schema = resolve_env(session) result = bulk_delete_emails_from_csv(session, uploaded_file, user, schema) if result.errors: st.error( f"Upload rejected — {len(result.errors)} validation error(s). " "Fix all errors and re-upload." ) st.dataframe( {"Validation Errors": result.errors}, width="content", ) else: st.success( f"Successfully queued {result.inserted_count} email(s) for deletion." )