Spaces:
Sleeping
Sleeping
| # foia_pdf.py | |
| from reportlab.lib.pagesizes import LETTER | |
| from reportlab.pdfgen import canvas | |
| from datetime import datetime | |
| from typing import Dict | |
| import os | |
| import uuid | |
| OUTPUT_DIR = "generated_pdfs" | |
| os.makedirs(OUTPUT_DIR, exist_ok=True) | |
| def generate_foia_appeal_pdf(record: Dict) -> str: | |
| """ | |
| Generates a FOIA appeal draft PDF. | |
| This does NOT submit anything to any agency. | |
| """ | |
| filename = f"foia_appeal_{uuid.uuid4().hex}.pdf" | |
| path = os.path.join(OUTPUT_DIR, filename) | |
| c = canvas.Canvas(path, pagesize=LETTER) | |
| width, height = LETTER | |
| text = c.beginText(40, height - 50) | |
| text.setFont("Times-Roman", 11) | |
| text.textLine(f"FOIA Appeal Draft") | |
| text.textLine("") | |
| text.textLine(f"Date: {datetime.utcnow().strftime('%Y-%m-%d')}") | |
| text.textLine("") | |
| text.textLine(f"Agency: {record.get('agency')}") | |
| text.textLine(f"Subject: {record.get('subject')}") | |
| text.textLine("") | |
| text.textLine("To Whom It May Concern,") | |
| text.textLine("") | |
| text.textLine( | |
| "This letter serves as a formal appeal regarding the handling of a " | |
| "Freedom of Information Act (FOIA) request." | |
| ) | |
| text.textLine("") | |
| text.textLine( | |
| "The requested materials concern publicly released or previously " | |
| "acknowledged records. Disclosure would contribute significantly " | |
| "to public understanding of government operations." | |
| ) | |
| text.textLine("") | |
| text.textLine("Request Description:") | |
| text.textLine(record.get("description", "")) | |
| text.textLine("") | |
| text.textLine( | |
| "This appeal is submitted in good faith for journalistic, academic, " | |
| "or public-interest review." | |
| ) | |
| text.textLine("") | |
| text.textLine("Sincerely,") | |
| text.textLine("FOIA Declassified Document Search") | |
| text.textLine("") | |
| text.textLine("—") | |
| text.textLine( | |
| "Disclaimer: This document is a draft generated for reference only. " | |
| "It does not constitute legal advice and does not submit a request " | |
| "to any agency." | |
| ) | |
| c.drawText(text) | |
| c.showPage() | |
| c.save() | |
| return path |