from google.cloud import bigquery import functions_framework from payment_queries import queries from google.oauth2 import service_account import json import requests import streamlit as st import pyperclip from ap import send_message_via_webhook, Webhook_urls # Dropdown for channels/members webhook_url = list(Webhook_urls.keys()) html_subject = """

Select channels/members

""" st.markdown(html_subject, unsafe_allow_html=True) selection = st.multiselect("", webhook_url) # SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/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" def check_duplicates(credentials_file): """Check for duplicates using BigQuery with the provided credentials file.""" results = {} # credentials = service_account.Credentials.from_service_account_info(json.loads(credentials_file)) credentials = service_account.Credentials.from_service_account_info( json.loads(credentials_file), scopes=[ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/drive.readonly" # Include if accessing external Drive resources ] ) client = bigquery.Client(credentials=credentials, project=credentials.project_id) for i, (query_name, query) in enumerate(queries.items()): query_job = client.query(query) df = query_job.result().to_dataframe() # For debugging, write the DataFrame to the Streamlit app st.write(f"{query_name}:", df) button_styles = """ """ st.markdown(button_styles, unsafe_allow_html=True) if st.button(f"Copy Query", key=f"copy_query_{i}"): pyperclip.copy(query) st.success('Query copied to clipboard!') if not df.empty: duplicate_count = len(df) results[query_name] = duplicate_count return results # Streamlit UI html_subject = """

Upload service a/c credentials

""" st.markdown(html_subject, unsafe_allow_html=True) # Upload credentials file credentials_file = st.file_uploader("", type="json") if credentials_file is not None: # Read the credentials file credentials_data = credentials_file.read().decode("utf-8") # Check for duplicates results = check_duplicates(credentials_data) st.write("") st.write("") if results: # Define the HTML message with gradient text and extra spacing html_subject = """

Duplicate Counts for Queries:

""" # Display HTML message with spacing st.markdown(html_subject, unsafe_allow_html=True) # Prepare the plain text message with styled boxes message_html = "" for query_name, count in results.items(): message_html += f"""
{query_name}
{count} records
""" # Display the styled message in Streamlit st.markdown(message_html, unsafe_allow_html=True) # Prepare plain text for Slack messages message_text = "" for query_name, count in results.items(): message_text += f"*{query_name}*\n{count}records\n\n" if not results: message_text = "No duplicates found in the queries." # Send the message to selected channels for channel in selection: webhook_url = Webhook_urls.get(channel) if webhook_url: send_message_via_webhook(message_text, webhook_url) else: st.error(f"Webhook URL not found for channel: {channel}")