mvp_2_hf_dev_clone / Routes /generate_report.py
srivatsavdamaraju's picture
Upload 82 files
e947927 verified
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)}")