Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI, File, UploadFile, HTTPException, Request | |
| from fastapi.responses import JSONResponse, HTMLResponse | |
| from fastapi.templating import Jinja2Templates | |
| from typing import Dict, Any | |
| import io | |
| import base64 | |
| import logging | |
| from .annotations import analyze_pdf | |
| # Configure logging | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| app = FastAPI( | |
| title="PDF Language Issue Analyzer", | |
| description="An API to analyze PDFs for language issues and provide an annotated PDF.", | |
| version="1.0.0" | |
| ) | |
| # Set up templates | |
| templates = Jinja2Templates(directory="app/templates") | |
| def read_root(request: Request): | |
| """ | |
| Render a simple HTML to verify the API is running. | |
| """ | |
| logger.info("Root endpoint accessed.") | |
| return HTMLResponse(content="<h1>PDF Language Issue Analyzer API is running.</h1>") | |
| async def analyze_pdf_endpoint(request: Request, file: UploadFile = File(...)): | |
| """ | |
| Analyze an uploaded PDF file for language issues and render the results on the frontend. | |
| """ | |
| if file.content_type != "application/pdf": | |
| logger.error("Invalid file type uploaded: %s", file.content_type) | |
| raise HTTPException(status_code=400, detail="Invalid file type. Only PDFs are supported.") | |
| try: | |
| contents = await file.read() | |
| file_stream = io.BytesIO(contents) | |
| language_issues, annotated_pdf = analyze_pdf(file_stream) | |
| response_context = { | |
| "request": request, | |
| "language_issues": language_issues | |
| } | |
| if annotated_pdf: | |
| # Encode the annotated PDF in Base64 | |
| encoded_pdf = base64.b64encode(annotated_pdf).decode('utf-8') | |
| annotated_pdf_data_url = f"data:application/pdf;base64,{encoded_pdf}" | |
| response_context["annotated_pdf"] = annotated_pdf_data_url | |
| logger.info("Annotated PDF generated and encoded.") | |
| logger.info("PDF analysis completed successfully.") | |
| return templates.TemplateResponse("index.html", response_context) | |
| except Exception as e: | |
| logger.exception("Error occurred during PDF analysis.") | |
| raise HTTPException(status_code=500, detail=str(e)) |