mmpSearch/scripts/handler/generate_manifest.py

53 lines
1.9 KiB
Python

# manifest_generator.py
import os
import json
import logging
# Caminhos relativos baseados na raiz do projeto passada como argumento
from utils import CONFIGS, scan_directory_list, scan_directory_tree
def generate_manifests(project_root_path):
"""
Gera os manifestos e retorna um dicionário com estatísticas.
"""
logging.info("=== Iniciando Geração de Manifestos (Pós-Processamento) ===")
# Estrutura para o relatório
report = {"generated": [], "failed": []}
for config in CONFIGS:
source_dir_abs = os.path.join(project_root_path, config["source_dir"])
output_file_abs = os.path.join(project_root_path, config["output_file"])
scan_type = config["scan_type"]
if not os.path.isdir(source_dir_abs):
logging.warning(f"Diretório fonte não encontrado: {source_dir_abs}")
report["failed"].append(f"{config['output_file']} (Fonte ausente)")
continue
result_data = None
try:
if scan_type == "tree":
result_data = scan_directory_tree(source_dir_abs)
elif scan_type == "list":
extensions = config.get("extensions", [])
result_data = scan_directory_list(source_dir_abs, extensions)
if result_data is not None:
output_dir = os.path.dirname(output_file_abs)
os.makedirs(output_dir, exist_ok=True)
with open(output_file_abs, "w", encoding="utf-8") as f:
json.dump(result_data, f, indent=2, ensure_ascii=False)
logging.info(f"Manifesto salvo: {output_file_abs}")
report["generated"].append(config["output_file"])
except Exception as e:
logging.error(f"Erro ao gerar {config['output_file']}: {e}")
report["failed"].append(f"{config['output_file']} (Erro: {str(e)})")
return report