From 349663b4e1150f7ed2a791282c70633c834ff497 Mon Sep 17 00:00:00 2001 From: Kai Chappell Date: Thu, 29 Jan 2026 18:01:22 +0000 Subject: [PATCH] Add PDF download button to dashboard --- src/py_dvt_ate/app/dashboard/app.py | 45 +++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/py_dvt_ate/app/dashboard/app.py b/src/py_dvt_ate/app/dashboard/app.py index c95a3da..38abcc8 100644 --- a/src/py_dvt_ate/app/dashboard/app.py +++ b/src/py_dvt_ate/app/dashboard/app.py @@ -876,6 +876,51 @@ def results_viewer_page() -> None: if selected_run.description: st.markdown(f"**Description:** {selected_run.description}") + # PDF Report Generation + st.markdown("### Export Report") + col_btn, col_status = st.columns([1, 3]) + + with col_btn: + generate_pdf = st.button("Generate PDF Report", type="primary") + + if generate_pdf: + try: + from py_dvt_ate.reporting import ReportConfig, ReportGenerator + + report_config = ReportConfig( + company_name="py_dvt_ate", + include_charts=True, + chart_dpi=150, + ) + generator = ReportGenerator( + repository=repository, + config=report_config, + ) + + with st.spinner("Generating PDF report..."): + pdf_bytes = generator.generate_bytes(UUID(selected_run.id)) + + st.session_state.pdf_bytes = pdf_bytes + st.session_state.pdf_filename = f"{selected_run.test_name}_{selected_run.id[:8]}.pdf" + st.success("PDF generated successfully!") + + except ImportError: + st.error( + "PDF generation requires additional dependencies. " + "Install with: `pip install py_dvt_ate[reports]`" + ) + except Exception as e: + st.error(f"Failed to generate PDF: {e}") + + # Show download button if PDF was generated + if "pdf_bytes" in st.session_state and st.session_state.pdf_bytes: + st.download_button( + label="Download PDF", + data=st.session_state.pdf_bytes, + file_name=st.session_state.get("pdf_filename", "report.pdf"), + mime="application/pdf", + ) + if selected_run.config_json: import json with st.expander("Test Configuration"):