akshay33 commited on
Commit
9ec3e62
·
verified ·
1 Parent(s): f7fc342

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +78 -0
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()