File size: 2,386 Bytes
e947927 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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
# Router initialization
Report_Generation_Router = APIRouter(prefix="/report_generation", tags=["Report_Generation"])
# ---------- MODELS ----------
class PageOptions(BaseModel):
include_cover_page: bool
include_header_footer: bool
class ReportRequest(BaseModel):
format_type: str # "pdf" or "html"
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 # for PDF storage or link
html_content: Optional[str] = None # for direct HTML return
GeGenerated_report_details: Optional[str] = None
# ---------- ROUTES ----------
@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)
# Extract PDF base64 or URL from the response
pdf_result_info = generated_report.get("pdf_base64", "PDF generated successfully")
return ReportResponse(
report_generation_status="success",
report_url=None, # you can replace with cloud URL if uploaded
GeGenerated_report_details=str(pdf_result_info)
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"PDF report generation failed: {str(e)}")
|