cadastro / supabase_conex.py
souzat19's picture
Upload 6 files
7ad7699 verified
import os
from dotenv import load_dotenv
from supabase import create_client, Client
from typing import Optional
load_dotenv()
class SupabaseConnection:
"""Gerenciador de conexão com Supabase"""
_instance: Optional['SupabaseConnection'] = None
def __new__(cls):
"""Implementa Singleton para evitar múltiplas conexões"""
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
"""Inicializa a conexão com Supabase"""
if not hasattr(self, 'client'):
self.supabase_url = os.getenv("SUPABASE_URL")
self.supabase_key = os.getenv("SUPABASE_KEY")
self.service_role_key = os.getenv("SUPABASE_SERVICE_ROLE_KEY")
if not all([self.supabase_url, self.supabase_key, self.service_role_key]):
raise ValueError(
"SUPABASE_URL, SUPABASE_KEY e SUPABASE_SERVICE_ROLE_KEY devem estar definidos no arquivo .env"
)
# Cliente normal para operações regulares
self.client = create_client(
supabase_url=self.supabase_url,
supabase_key=self.supabase_key
)
# Cliente admin para operações administrativas
self.admin_client = create_client(
supabase_url=self.supabase_url,
supabase_key=self.service_role_key
)
def get_client(self) -> Client:
"""Retorna o cliente Supabase regular"""
return self.client
def get_admin_client(self) -> Client:
"""Retorna o cliente Supabase com privilégios administrativos"""
return self.admin_client
def test_connection(self) -> bool:
"""Testa a conexão com Supabase"""
try:
# Tenta fazer uma query simples
print("🔍 Testando conexão com Supabase...")
response = self.client.table('users').select("*").limit(1).execute()
print("✅ Conexão Supabase bem sucedida!")
return True
except Exception as e:
print(f"❌ Erro na conexão Supabase: {str(e)}")
return False
def get_table(self, table_name: str):
"""
Retorna uma referência para uma tabela específica
Args:
table_name: Nome da tabela
Returns:
PostgrestFilterBuilder: Referência para a tabela
"""
return self.client.table(table_name)