spwebsite / test_supabase.py
geqintan's picture
update
133609a
import os
from dotenv import load_dotenv
from supabase import create_client, Client
from supabase_auth.errors import AuthApiError
# Load environment variables from .env file
load_dotenv()
# Supabase Configuration
SUPABASE_URL = os.environ.get("SUPABASE_URL")
SUPABASE_ANON_KEY = os.environ.get("SUPABASE_ANON_KEY")
if not SUPABASE_URL or not SUPABASE_ANON_KEY:
print("Error: Supabase URL and Anon Key must be set as environment variables in .env file.")
exit(1)
supabase_anon: Client = create_client(SUPABASE_URL, SUPABASE_ANON_KEY)
SUPABASE_SERVICE_ROLE_KEY = os.environ.get("SUPABASE_SERVICE_ROLE_KEY")
if not SUPABASE_SERVICE_ROLE_KEY:
print("Error: SUPABASE_SERVICE_ROLE_KEY must be set as an environment variable in .env file for admin operations.")
exit(1)
supabase_admin: Client = create_client(SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY)
async def test_db_connection():
"""Tests a simple database connection by querying a non-existent table."""
print("\n--- Testing Database Connection ---")
try:
# Attempt a simple query to check connection.
# This will likely fail if the table doesn't exist, but confirms connection.
res = supabase_anon.table('non_existent_table').select('*').limit(1).execute()
print("Database connection successful (or query executed without connection error).")
print(f"Query result (expected empty or error): {res.data}")
except Exception as e:
print(f"Database connection test failed: {e}")
print("Please ensure SUPABASE_URL is correct and your network allows access to Supabase.")
async def test_user_registration(email, password):
"""Tests user registration with Supabase."""
print(f"\n--- Testing User Registration for {email} ---")
try:
res = supabase_anon.auth.sign_up({
"email": email,
"password": password
})
if res.user:
print(f"User registration successful for {res.user.email}! Please check your email for verification.")
print(f"User ID: {res.user.id}")
else:
print("User registration failed: No user returned.")
print(f"Supabase response: {res}")
except AuthApiError as e:
print(f"User registration failed (AuthApiError): {e.message}")
except Exception as e:
print(f"An unexpected error occurred during registration: {e}")
print("Please ensure Supabase URL and Anon Key are correct, and Email Signups are enabled in Supabase Auth settings.")
async def list_supabase_users():
"""Lists all users in Supabase."""
print("\n--- Listing Supabase Users ---")
try:
# Supabase admin client is required to list users
users_list = supabase_admin.auth.admin.list_users()
if users_list: # Assuming it returns a list of user objects directly
print(f"Found {len(users_list)} users:")
for user in users_list:
print(f" User ID: {user.id}, Email: {user.email}, Created At: {user.created_at}")
else:
print("No users found in Supabase.")
except Exception as e:
print(f"Failed to list Supabase users: {e}")
print("Please ensure your Supabase Anon Key has sufficient permissions or use a service role key if necessary.")
async def main():
await test_db_connection()
# Replace with a test email and password
test_email = "test@example.com" # Using a more standard test email format
test_password = "testpassword"
await test_user_registration(test_email, test_password)
await list_supabase_users()
if __name__ == "__main__":
import asyncio
asyncio.run(main())