Spaces:
Sleeping
Sleeping
Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import io
|
| 4 |
+
|
| 5 |
+
def extract_contacts(accounts_file, contacts_file, selected_status, selected_sites, contact_type):
|
| 6 |
+
# Read uploaded CSVs
|
| 7 |
+
final_accounts = pd.read_csv(accounts_file)
|
| 8 |
+
final_contacts = pd.read_csv(contacts_file)
|
| 9 |
+
|
| 10 |
+
# Filter accounts
|
| 11 |
+
filtered_accounts = final_accounts[
|
| 12 |
+
(final_accounts['OVERALL_STATUS'].isin(selected_status)) &
|
| 13 |
+
(final_accounts['SITE'].isin(selected_sites))
|
| 14 |
+
]
|
| 15 |
+
|
| 16 |
+
# Filter contacts
|
| 17 |
+
filtered_contacts = final_contacts[
|
| 18 |
+
(final_contacts['STATUS'].str.upper() == contact_type.upper()) &
|
| 19 |
+
(final_contacts['ACCOUNT_NAME'].isin(filtered_accounts['ACCOUNT_NAME']))
|
| 20 |
+
]
|
| 21 |
+
|
| 22 |
+
# Prepare outputs
|
| 23 |
+
contacts = ", ".join(filtered_contacts['CONTACT'].dropna().astype(str))
|
| 24 |
+
emails = ", ".join(filtered_contacts['EMAIL'].dropna().astype(str))
|
| 25 |
+
sfids = ", ".join(filtered_contacts['SALESFORCE_EXTERNAL_ID'].dropna().astype(str))
|
| 26 |
+
|
| 27 |
+
df_out = pd.DataFrame({
|
| 28 |
+
'CONTACTS': [contacts if contacts else f"No {contact_type} Contacts"],
|
| 29 |
+
'EMAILS': [emails if emails else f"No {contact_type} Emails"],
|
| 30 |
+
'SF_IDS': [sfids if sfids else f"No {contact_type} IDs"]
|
| 31 |
+
})
|
| 32 |
+
|
| 33 |
+
# Convert to CSV for download
|
| 34 |
+
csv_buffer = io.StringIO()
|
| 35 |
+
df_out.to_csv(csv_buffer, index=False)
|
| 36 |
+
csv_bytes = csv_buffer.getvalue().encode()
|
| 37 |
+
|
| 38 |
+
return df_out, csv_bytes
|
| 39 |
+
|
| 40 |
+
def ui(accounts_file, contacts_file):
|
| 41 |
+
# Read files to populate filters
|
| 42 |
+
final_accounts = pd.read_csv(accounts_file)
|
| 43 |
+
overall_status_options = list(final_accounts['OVERALL_STATUS'].unique())
|
| 44 |
+
site_options = list(final_accounts['SITE'].unique())
|
| 45 |
+
|
| 46 |
+
# Return interactive function with preloaded options
|
| 47 |
+
def run(selected_status, selected_sites, contact_type):
|
| 48 |
+
return extract_contacts(accounts_file, contacts_file, selected_status, selected_sites, contact_type)
|
| 49 |
+
|
| 50 |
+
return gr.Interface(
|
| 51 |
+
fn=run,
|
| 52 |
+
inputs=[
|
| 53 |
+
gr.CheckboxGroup(choices=overall_status_options, label="Select OVERALL_STATUS"),
|
| 54 |
+
gr.CheckboxGroup(choices=site_options, label="Select SITE"),
|
| 55 |
+
gr.Radio(["Active", "Inactive"], label="Contact Type")
|
| 56 |
+
],
|
| 57 |
+
outputs=[
|
| 58 |
+
gr.Dataframe(label="Extracted Contacts"),
|
| 59 |
+
gr.File(label="Download CSV")
|
| 60 |
+
],
|
| 61 |
+
allow_flagging="never",
|
| 62 |
+
live=True,
|
| 63 |
+
title="Account - Contact Extractor"
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
# Main interface to upload files
|
| 67 |
+
def launcher(accounts_file, contacts_file):
|
| 68 |
+
return ui(accounts_file, contacts_file)
|
| 69 |
+
|
| 70 |
+
gr.Interface(
|
| 71 |
+
fn=launcher,
|
| 72 |
+
inputs=[
|
| 73 |
+
gr.File(label="Upload Accounts CSV (accounts.csv)", file_types=[".csv"]),
|
| 74 |
+
gr.File(label="Upload Contacts CSV (contacts.csv)", file_types=[".csv"])
|
| 75 |
+
],
|
| 76 |
+
outputs="component",
|
| 77 |
+
title="Upload Your Files to Start"
|
| 78 |
+
).launch()
|