|
|
from fastapi import APIRouter, HTTPException |
|
|
from pydantic import BaseModel |
|
|
from typing import List, Optional |
|
|
from Routes.helpers.report_generation_helpers import return_html_report, html_to_pdf_via_api |
|
|
|
|
|
|
|
|
Report_Generation_Router = APIRouter(prefix="/report_generation", tags=["Report_Generation"]) |
|
|
|
|
|
|
|
|
|
|
|
class PageOptions(BaseModel): |
|
|
include_cover_page: bool |
|
|
include_header_footer: bool |
|
|
|
|
|
|
|
|
class ReportRequest(BaseModel): |
|
|
format_type: str |
|
|
reportname: str |
|
|
include_citations: bool |
|
|
success: bool |
|
|
list_of_queries: List[str] |
|
|
theme: str |
|
|
pageoptions: PageOptions |
|
|
|
|
|
|
|
|
class ReportResponse(BaseModel): |
|
|
report_generation_status: str |
|
|
report_url: Optional[str] = None |
|
|
html_content: Optional[str] = None |
|
|
GeGenerated_report_details: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Report_Generation_Router.post("/generate_report", response_model=ReportResponse) |
|
|
async def generate_html_report(report_request: ReportRequest): |
|
|
""" |
|
|
Generates a static HTML report using Gemini AI. |
|
|
""" |
|
|
try: |
|
|
html_content = return_html_report() |
|
|
return ReportResponse( |
|
|
report_generation_status="success", |
|
|
html_content=html_content, |
|
|
GeGenerated_report_details="HTML report generated successfully." |
|
|
) |
|
|
except Exception as e: |
|
|
raise HTTPException(status_code=500, detail=f"HTML report generation failed: {str(e)}") |
|
|
|
|
|
|
|
|
|
|
|
@Report_Generation_Router.post("/save_generated_report", response_model=ReportResponse) |
|
|
async def save_generated_report(report_request: ReportRequest): |
|
|
""" |
|
|
Generates HTML and converts it to a PDF file via external API. |
|
|
""" |
|
|
try: |
|
|
html_content = return_html_report() |
|
|
generated_report = html_to_pdf_via_api(html_content) |
|
|
|
|
|
|
|
|
pdf_result_info = generated_report.get("pdf_base64", "PDF generated successfully") |
|
|
|
|
|
return ReportResponse( |
|
|
report_generation_status="success", |
|
|
report_url=None, |
|
|
GeGenerated_report_details=str(pdf_result_info) |
|
|
) |
|
|
|
|
|
except Exception as e: |
|
|
raise HTTPException(status_code=500, detail=f"PDF report generation failed: {str(e)}") |
|
|
|