From 1b9284cf500c0c3e31e29c84db1a00791c483237 Mon Sep 17 00:00:00 2001 From: EDR Labs <60473889+Edgardo-Ramirez-Canales@users.noreply.github.com> Date: Thu, 18 Jun 2026 22:05:12 -0600 Subject: [PATCH] =?UTF-8?q?features:=20generaci=C3=B3n=20autom=C3=A1tica?= =?UTF-8?q?=20de=20informe=20de=20evidencia=20(PDF/HTML)=20(v=C3=ADa=20Git?= =?UTF-8?q?Hub=20Trending=20Agent)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agents/report_generator.py | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 agents/report_generator.py diff --git a/agents/report_generator.py b/agents/report_generator.py new file mode 100644 index 0000000..f48297a --- /dev/null +++ b/agents/report_generator.py @@ -0,0 +1,39 @@ +import json, os, markdown, weasyprint + +def cargar_resultados(ruta_json: str) -> dict: + with open(ruta_json, 'r', encoding='utf-8') as f: + return json.load(f) + +def renderizar_markdown(md_text: str) -> str: + return markdown.markdown(md_text, extensions=['fenced_code', 'tables']) + +def generar_html(datos: dict) -> str: + secciones = [] + secciones.append(f"

{datos.get('problema','Problema')}

") + secciones.append(f"

Resumen de búsqueda

{renderizar_markdown(datos.get('busqueda',''))}") + secciones.append(f"

Candidatos evaluados

{renderizar_markdown(datos.get('candidatos',''))}") + secciones.append(f"

Recomendación y verificación

{renderizar_markdown(datos.get('recomendacion',''))}") + return "\n".join(secciones) + +def guardar_html(html: str, salida: str): + with open(salida, 'w', encoding='utf-8') as f: + f.write(html) + +def generar_pdf(html: str, salida_pdf: str): + weasyprint.HTML(string=html).write_pdf(salida_pdf) + +def main(ruta_json: str, salida_html: str = 'reporte.html', salida_pdf: str = 'reporte.pdf'): + datos = cargar_resultados(ruta_json) + html = generar_html(datos) + guardar_html(html, salida_html) + generar_pdf(html, salida_pdf) + print(f"Informe generado: {os.path.abspath(salida_html)} y {os.path.abspath(salida_pdf)}") + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(description='Genera informe de evidencia para github-solution-research') + parser.add_argument('json', help='Archivo JSON con los resultados de la investigación') + parser.add_argument('--html', default='reporte.html') + parser.add_argument('--pdf', default='reporte.pdf') + args = parser.parse_args() + main(args.json, args.html, args.pdf) \ No newline at end of file