akshay33 commited on
Commit
fe01032
·
verified ·
1 Parent(s): 73f7b47

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -40
app.py CHANGED
@@ -3,9 +3,9 @@ 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[
@@ -19,7 +19,7 @@ def extract_contacts(accounts_file, contacts_file, selected_status, selected_sit
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))
@@ -30,49 +30,43 @@ def extract_contacts(accounts_file, contacts_file, selected_status, selected_sit
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()
 
3
  import io
4
 
5
  def extract_contacts(accounts_file, contacts_file, selected_status, selected_sites, contact_type):
6
+ # Read CSVs
7
+ final_accounts = pd.read_csv(accounts_file.name)
8
+ final_contacts = pd.read_csv(contacts_file.name)
9
 
10
  # Filter accounts
11
  filtered_accounts = final_accounts[
 
19
  (final_contacts['ACCOUNT_NAME'].isin(filtered_accounts['ACCOUNT_NAME']))
20
  ]
21
 
22
+ # Prepare output
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))
 
30
  'SF_IDS': [sfids if sfids else f"No {contact_type} IDs"]
31
  })
32
 
33
+ # Create 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
+ with gr.Blocks() as demo:
41
+ gr.Markdown("# Contact Extractor (Upload & Filter)")
 
 
 
42
 
43
+ with gr.Row():
44
+ accounts_file = gr.File(label="Upload Accounts CSV", file_types=[".csv"])
45
+ contacts_file = gr.File(label="Upload Contacts CSV", file_types=[".csv"])
46
 
47
+ status_dropdown = gr.CheckboxGroup(choices=[], label="Select OVERALL_STATUS")
48
+ site_dropdown = gr.CheckboxGroup(choices=[], label="Select SITE")
49
+ contact_type = gr.Radio(["Active", "Inactive"], label="Contact Type")
50
+
51
+ submit_btn = gr.Button("Extract Contacts")
52
+
53
+ output_table = gr.Dataframe()
54
+ download_csv = gr.File(label="Download CSV")
55
+
56
+ # Populate filters after file upload
57
+ def populate_filters(accounts_file):
58
+ df = pd.read_csv(accounts_file.name)
59
+ return list(df['OVERALL_STATUS'].unique()), list(df['SITE'].unique())
 
 
60
 
61
+ accounts_file.change(populate_filters,
62
+ inputs=accounts_file,
63
+ outputs=[status_dropdown, site_dropdown])
64
+
65
+ # Run extraction
66
+ submit_btn.click(
67
+ extract_contacts,
68
+ inputs=[accounts_file, contacts_file, status_dropdown, site_dropdown, contact_type],
69
+ outputs=[output_table, download_csv]
70
+ )
71
 
72
+ demo.launch()