#!/usr/bin/env python3
"""
Script para aplicar correções de nomenclatura ao server_fastapi.py
Aplica as mesmas 43 correções do corrections_mapping.py
"""
import re
# Carregar o mapeamento de correções
with open('/opt/mcp-servers/active-directory/.base-code/corrections_mapping.py', 'r', encoding='utf-8') as f:
content = f.read()
# Extrair o array de correções
start = content.find('CORRECTIONS = [')
end = content.find(']', start) + 1
corrections_str = content[start:end].replace('CORRECTIONS = ', '')
CORRECTIONS = eval(corrections_str)
# Ler o arquivo server_fastapi.py
with open('/opt/mcp-servers/active-directory/.base-code/src/active_directory_mcp/server_fastapi.py', 'r', encoding='utf-8') as f:
server_fastapi_content = f.read()
# Criar backup
with open('/opt/mcp-servers/active-directory/.base-code/src/active_directory_mcp/server_fastapi.py.backup', 'w', encoding='utf-8') as f:
f.write(server_fastapi_content)
print("✅ Backup criado: server_fastapi.py.backup")
print(f"\n🔧 Aplicando {len(CORRECTIONS)} correções...\n")
# Aplicar correções uma por uma
corrections_applied = 0
for correction in CORRECTIONS:
old_name = correction['old_name']
new_name = correction['new_name']
new_description = correction['new_description']
# Pattern 1: Substituir chave do dictionary (self.tools["old_name"])
old_key_pattern = f'self.tools["{old_name}"]'
new_key_pattern = f'self.tools["{new_name}"]'
if old_key_pattern in server_fastapi_content:
server_fastapi_content = server_fastapi_content.replace(old_key_pattern, new_key_pattern)
# Pattern 2: Substituir a descrição
# Encontrar a descrição antiga e substituir pela nova
# A descrição vem logo após a chave, no formato: "description": "texto aqui"
# Regex para encontrar e substituir a descrição desta ferramenta
# Procura por self.tools["new_name"] = { ... "description": "...", ...
tool_pattern = re.compile(
rf'self\.tools\["{re.escape(new_name)}"\]\s*=\s*\{{\s*"description":\s*"([^"]*)"',
re.DOTALL
)
match = tool_pattern.search(server_fastapi_content)
if match:
old_description = match.group(1)
# Substituir a descrição antiga pela nova
server_fastapi_content = server_fastapi_content.replace(
f'"description": "{old_description}"',
f'"description": "{new_description}"',
1 # Apenas a primeira ocorrência (a desta ferramenta)
)
print(f"✅ {old_name} → {new_name}")
corrections_applied += 1
else:
print(f"⚠️ {old_name} → {new_name} (chave atualizada, descrição não encontrada)")
corrections_applied += 1
else:
print(f"❌ {old_name} não encontrado")
# Salvar o arquivo atualizado
with open('/opt/mcp-servers/active-directory/.base-code/src/active_directory_mcp/server_fastapi.py', 'w', encoding='utf-8') as f:
f.write(server_fastapi_content)
print(f"\n✅ Arquivo atualizado com {corrections_applied}/{len(CORRECTIONS)} correções!")
print("✅ server_fastapi.py salvo com todas as correções aplicadas")