evo-ai/scripts/run_seeders.py

113 lines
3.7 KiB
Python

"""
Script principal para executar todos os seeders em sequência.
Verifica as dependências entre os seeders e executa na ordem correta.
"""
import os
import sys
import logging
import argparse
from dotenv import load_dotenv
# Configurar logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# Importar seeders
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from scripts.seeders.admin_seeder import create_admin_user
from scripts.seeders.client_seeder import create_demo_client_and_user
from scripts.seeders.agent_seeder import create_demo_agents
from scripts.seeders.mcp_server_seeder import create_mcp_servers
from scripts.seeders.tool_seeder import create_tools
from scripts.seeders.contact_seeder import create_demo_contacts
def setup_environment():
"""Configura o ambiente para os seeders"""
load_dotenv()
# Verificar se as variáveis de ambiente essenciais estão definidas
required_vars = ["POSTGRES_CONNECTION_STRING"]
missing_vars = [var for var in required_vars if not os.getenv(var)]
if missing_vars:
logger.error(f"Variáveis de ambiente necessárias não definidas: {', '.join(missing_vars)}")
return False
return True
def run_seeders(seeders):
"""
Executa os seeders especificados
Args:
seeders (list): Lista de seeders para executar
Returns:
bool: True se todos os seeders foram executados com sucesso, False caso contrário
"""
all_seeders = {
"admin": create_admin_user,
"client": create_demo_client_and_user,
"agents": create_demo_agents,
"mcp_servers": create_mcp_servers,
"tools": create_tools,
"contacts": create_demo_contacts
}
# Define a ordem correta de execução (dependências)
seeder_order = ["admin", "client", "mcp_servers", "tools", "agents", "contacts"]
# Se nenhum seeder for especificado, executar todos
if not seeders:
seeders = seeder_order
else:
# Verificar se todos os seeders especificados existem
invalid_seeders = [s for s in seeders if s not in all_seeders]
if invalid_seeders:
logger.error(f"Seeders inválidos: {', '.join(invalid_seeders)}")
logger.info(f"Seeders disponíveis: {', '.join(all_seeders.keys())}")
return False
# Garantir que seeders sejam executados na ordem correta
seeders = [s for s in seeder_order if s in seeders]
# Executar seeders
success = True
for seeder_name in seeders:
logger.info(f"Executando seeder: {seeder_name}")
try:
seeder_func = all_seeders[seeder_name]
if not seeder_func():
logger.error(f"Falha ao executar seeder: {seeder_name}")
success = False
except Exception as e:
logger.error(f"Erro ao executar seeder {seeder_name}: {str(e)}")
success = False
return success
def main():
"""Função principal"""
parser = argparse.ArgumentParser(description='Executa seeders para popular o banco de dados')
parser.add_argument('--seeders', nargs='+', help='Seeders para executar (admin, client, agents, mcp_servers, tools, contacts)')
args = parser.parse_args()
# Configurar ambiente
if not setup_environment():
sys.exit(1)
# Executar seeders
success = run_seeders(args.seeders)
# Saída
if success:
logger.info("Todos os seeders foram executados com sucesso")
sys.exit(0)
else:
logger.error("Houve erros ao executar os seeders")
sys.exit(1)
if __name__ == "__main__":
main()