Spaces:
Sleeping
Sleeping
File size: 4,298 Bytes
ef0081c |
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import gradio as gr
import psycopg2
import pandas as pd
DB_CONNECTION_STRING = "postgresql://aws-0-eu-central-1.pooler.supabase.com:6543/postgres"
DB_USER = "postgres.fokjwzocbnlqjeifhrop"
DB_PASSWORD = "72hj9eKQw5GBMHPn"
# Connect to the PostgreSQL database
def connect_db():
try:
conn = psycopg2.connect(
dbname="postgres",
user=DB_USER,
password=DB_PASSWORD,
host=DB_CONNECTION_STRING.split("//")[1].split(":")[0],
port=DB_CONNECTION_STRING.split(":")[-1].split("/")[0]
)
return conn
except Exception as e:
print("Error connecting to database:", e)
return None
# Function to create HTML clickable links
def make_clickable_wallet_number(df):
df['wallet_number'] = df['wallet_number'].apply(
lambda x: f'<a href="#" onclick="navigator.clipboard.writeText(\'{x}\'); alert(\'Copied: {x}\')">{x}</a>'
)
return gr.Dataframe(value=df, interactive=False, datatype="html")
# Function to retrieve withdrawal requests
def get_withdrawal_requests(filter_status=None):
conn = connect_db()
if conn is None:
return pd.DataFrame()
query = """
SELECT wr.request_id, wr.username, wr.amount, wr.status, wr.created_at, wr.completed_at, uw.wallet_number
FROM withdrawal_requests wr
JOIN user_wallet uw ON wr.wallet_id = uw.id
"""
if filter_status == "completed":
query += " WHERE wr.status = 'completed'"
elif filter_status == "incomplete":
query += " WHERE wr.status = 'incomplete'"
df = pd.read_sql(query, conn)
conn.close()
return df
# Function to update the status of selected requests
def update_request_status(selected_ids, new_status):
conn = connect_db()
if conn is None:
return "Error: Could not connect to the database."
try:
with conn.cursor() as cursor:
completed_at_fn = "NOW()" if new_status == "completed" else "NULL"
update_query = f"""
UPDATE withdrawal_requests
SET status = %s, completed_at = {completed_at_fn} WHERE request_id = ANY(%s)
"""
cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
conn.commit()
return f"Updated {len(selected_ids.split(","))} requests to {new_status}."
except Exception as e:
conn.rollback()
return f"Error: {e}"
finally:
conn.close()
# Gradio interface functions
def view_requests(filter_option):
status_filter = None
if filter_option == "Completed Requests":
status_filter = "completed"
elif filter_option == "Incomplete Requests":
status_filter = "incomplete"
df = get_withdrawal_requests(filter_status=status_filter)
df = make_clickable_wallet_number(df)
return df
def change_status(selected_ids, new_status):
message = update_request_status(selected_ids, new_status)
return message
# Gradio UI
with gr.Blocks() as app:
gr.Markdown("# Withdrawal Requests Management")
filter_option = gr.Radio(
choices=["All Requests", "Completed Requests", "Incomplete Requests"],
label="Filter Requests",
value="All Requests"
)
requests_table = gr.Dataframe(
label="Withdrawal Requests",
interactive=True
)
refresh_button = gr.Button("Refresh")
refresh_button.click(
view_requests, inputs=filter_option, outputs=requests_table
)
selected_ids = gr.Textbox(label="Selected Request IDs (comma-separated)", interactive=True)
current_status = gr.Radio(
choices=["incomplete", "completed"],
label="Set Selected Requests to",
value="incomplete"
)
update_button = gr.Button("Update Status")
# Add a Textbox to display the status message
status_message = gr.Textbox(label="Status Message", interactive=False)
# Updated button click with the correct output
update_button.click(
change_status, inputs=[selected_ids, current_status], outputs=status_message
)
# Initial load
requests_table.value = view_requests("All Requests")
# Run the app
app.launch(share=True) |