Spaces:
Sleeping
Sleeping
File size: 5,952 Bytes
a686b1b |
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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
"""
Script interativo para configurar Supabase para RAG Template.
Facilita a configuracao do DATABASE_URL e testa a conexao.
"""
import os
import sys
from urllib.parse import quote_plus
def print_header():
"""Imprime o cabecalho do script."""
print("=" * 60)
print(" Setup Supabase para RAG Template")
print("=" * 60)
print()
def get_project_ref():
"""Solicita o Project Reference ID."""
print("1. Obter Project Reference")
print(" - Acesse seu projeto no Supabase")
print(" - Va para Settings > Database")
print(" - Copie o 'Reference ID' (formato: xxxxxxxxxxxxx)")
print()
project_ref = input("Project Reference ID: ").strip()
return project_ref
def get_password():
"""Solicita a senha do banco."""
print("\n2. Obter Senha do Banco")
print(" - Use a senha que voce definiu ao criar o projeto")
print(" - Ou resete em Settings > Database > Database Password")
print()
password = input("Database Password: ").strip()
return password
def build_database_url(project_ref: str, password: str) -> str:
"""Constroi a DATABASE_URL."""
# URL encode da senha para caracteres especiais
encoded_password = quote_plus(password)
# Construir URL
database_url = (
f"postgresql://postgres:{encoded_password}"
f"@db.{project_ref}.supabase.co:5432/postgres"
)
return database_url
def save_to_env(database_url: str) -> bool:
"""Salva DATABASE_URL no arquivo .env."""
print("\n3. Salvar no .env")
# Verificar se .env ja existe
env_path = ".env"
if os.path.exists(env_path):
print(f" Arquivo .env encontrado")
overwrite = input(" Sobrescrever DATABASE_URL existente? (s/n): ").strip().lower()
if overwrite != 's':
print(" Pulando salvamento no .env")
return False
# Ler conteudo existente
existing_content = ""
if os.path.exists(env_path):
with open(env_path, 'r') as f:
lines = f.readlines()
# Remover linha DATABASE_URL existente
existing_content = "".join(
line for line in lines if not line.startswith("DATABASE_URL=")
)
# Adicionar nova DATABASE_URL
with open(env_path, 'w') as f:
f.write(existing_content)
if existing_content and not existing_content.endswith('\n'):
f.write('\n')
f.write(f"DATABASE_URL={database_url}\n")
print(f" DATABASE_URL salvo em {env_path}")
return True
def test_connection(database_url: str) -> bool:
"""Testa a conexao com o banco."""
print("\n4. Testar Conexao")
test = input(" Testar conexao agora? (s/n): ").strip().lower()
if test != 's':
print(" Pulando teste de conexao")
return False
try:
# Importar aqui para nao quebrar se dependencias nao instaladas
import psycopg
from psycopg import sql
print(" Conectando ao Supabase...")
with psycopg.connect(database_url) as conn:
with conn.cursor() as cur:
# Testar conexao
cur.execute("SELECT version();")
version = cur.fetchone()[0]
print(f" Conexao bem-sucedida!")
print(f" PostgreSQL version: {version[:50]}...")
# Verificar extensao pgvector
cur.execute(
"SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname = 'vector');"
)
has_vector = cur.fetchone()[0]
if has_vector:
print(" Extensao pgvector: INSTALADA")
else:
print(" Extensao pgvector: NAO ENCONTRADA")
print(" Execute: CREATE EXTENSION vector;")
print(" No SQL Editor do Supabase")
return True
except ImportError:
print(" ERRO: psycopg nao instalado")
print(" Execute: pip install psycopg[binary]")
return False
except Exception as e:
print(f" ERRO ao conectar: {e}")
print("\n Verifique:")
print(" - Project Reference correto")
print(" - Senha correta")
print(" - Supabase nao pausado (free tier pausa apos 1 semana)")
return False
def print_next_steps(success: bool):
"""Imprime proximos passos."""
print("\n" + "=" * 60)
print(" Proximos Passos")
print("=" * 60)
if success:
print("\n Conexao configurada com sucesso!")
print("\n 1. Certifique-se de ter HF_TOKEN no .env:")
print(" HF_TOKEN=seu_token_huggingface")
print("\n 2. Execute o app:")
print(" python app.py")
print("\n 3. Acesse: http://localhost:7860")
else:
print("\n Configure DATABASE_URL manualmente no .env:")
print(" DATABASE_URL=postgresql://postgres:SENHA@db.REF.supabase.co:5432/postgres")
print("\n Ou execute este script novamente")
print("\n Documentacao completa: docs/SUPABASE_SETUP.md")
print("=" * 60)
def main():
"""Funcao principal."""
print_header()
# Coletar informacoes
project_ref = get_project_ref()
if not project_ref:
print("ERRO: Project Reference vazio")
sys.exit(1)
password = get_password()
if not password:
print("ERRO: Senha vazia")
sys.exit(1)
# Construir URL
database_url = build_database_url(project_ref, password)
print("\n" + "=" * 60)
print(" DATABASE_URL Gerado")
print("=" * 60)
print(f"\n{database_url}\n")
# Salvar no .env
saved = save_to_env(database_url)
# Testar conexao
success = test_connection(database_url)
# Proximos passos
print_next_steps(success and saved)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\nSetup cancelado pelo usuario")
sys.exit(0)
|