ProjectCrysta / app.py
akshay33's picture
Update app.py
f6b0b56 verified
Raw History Blame Contribute Delete
2.84 kB
import gradio as gr
import pandas as pd
import tempfile
# Preloaded fallback data
default_accounts = pd.read_csv("accounts.csv")
default_contacts = pd.read_csv("contacts.csv")
def extract_contacts(accounts_file, contacts_file, selected_status, selected_sites, contact_type):
# Decide source: uploaded or default
if accounts_file is not None and contacts_file is not None:
final_accounts = pd.read_csv(accounts_file.name)
final_contacts = pd.read_csv(contacts_file.name)
else:
final_accounts = default_accounts
final_contacts = default_contacts
# Filter accounts
filtered_accounts = final_accounts[
(final_accounts['OVERALL_STATUS'].isin(selected_status)) &
(final_accounts['SITE'].isin(selected_sites))
]
# Filter contacts
filtered_contacts = final_contacts[
(final_contacts['STATUS'].str.upper() == contact_type.upper()) &
(final_contacts['ACCOUNT_NAME'].isin(filtered_accounts['ACCOUNT_NAME']))
]
# Prepare output
contacts = ", ".join(filtered_contacts['CONTACT'].dropna().astype(str))
emails = ", ".join(filtered_contacts['EMAIL'].dropna().astype(str))
sfids = ", ".join(filtered_contacts['SALESFORCE_EXTERNAL_ID'].dropna().astype(str))
df_out = pd.DataFrame({
'CONTACTS': [contacts if contacts else f"No {contact_type} Contacts"],
'EMAILS': [emails if emails else f"No {contact_type} Emails"],
'SF_IDS': [sfids if sfids else f"No {contact_type} IDs"]
})
# Save to temporary file for download
tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".csv", mode='w', encoding='utf-8')
df_out.to_csv(tmp_file, index=False)
tmp_file.close()
return df_out, tmp_file.name
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## 🗂️ Contact Extractor - Optional Upload (Stealth Mode)")
with gr.Row():
accounts_file = gr.File(label="Upload Accounts CSV (optional)", file_types=[".csv"])
contacts_file = gr.File(label="Upload Contacts CSV (optional)", file_types=[".csv"])
status_dropdown = gr.CheckboxGroup(
choices=list(default_accounts['OVERALL_STATUS'].unique()),
label="Select OVERALL_STATUS"
)
site_dropdown = gr.CheckboxGroup(
choices=list(default_accounts['SITE'].unique()),
label="Select SITE"
)
contact_type = gr.Radio(["Active", "Inactive"], label="Contact Type")
submit_btn = gr.Button("Extract Contacts")
output_table = gr.Dataframe(label="Filtered Contact Data")
download_csv = gr.File(label="Download CSV")
submit_btn.click(
extract_contacts,
inputs=[accounts_file, contacts_file, status_dropdown, site_dropdown, contact_type],
outputs=[output_table, download_csv]
)
if __name__ == "__main__":
demo.launch(share=True)