Spaces:
Sleeping
Sleeping
File size: 2,844 Bytes
9ec3e62 a774f23 9ec3e62 f6b0b56 9ec3e62 5cca356 9ec3e62 fe01032 9ec3e62 bdaf833 a774f23 9ec3e62 a774f23 9ec3e62 a774f23 fe01032 f6b0b56 9ec3e62 5cca356 f6b0b56 5cca356 f6b0b56 5cca356 fe01032 70773ec fe01032 f6b0b56 fe01032 9ec3e62 bdaf833 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 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)
|