42a155aeaa
- Add LibreOffice Writer and DejaVu fonts to Dockerfile for PDF generation
- Add PyPDF2 and reportlab to requirements.txt
- Refactor email_sender.py:
- Enforce 1-inch margins on all sides
- Isolate line numbering to transcript section only
- Add generate_pdf_documents() to build:
- TRANSCRIPT.pdf (cover + transcript)
- SUMMARY.pdf (cover + summary)
- COMBINED.pdf (transcript cover + summary + TRANSCRIPT header + transcript)
- Add page numbers (bottom-right) to all PDFs via reportlab
- Update tasks.py:
- Use generate_pdf_documents() after creating DOCX files
- Attach source JSON, MD files, and compiled PDFs in success email
- Add test_docx_generation.py for transcript/summary/combined DOCX testing
97 lines
3.4 KiB
Python
97 lines
3.4 KiB
Python
"""
|
|
Local test for transcript/summary/combined .docx generation.
|
|
Checks:
|
|
- Line numbering only on transcript pages.
|
|
- Page numbering (X of Y) in footer.
|
|
- Cover pages present and centered.
|
|
- Combined document structure.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import tempfile
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from scraibe.email_sender import (
|
|
create_transcript_docx,
|
|
create_summary_docx,
|
|
create_combined_docx,
|
|
)
|
|
|
|
TRANSCRIPT_TEXT = """[00:00] Speaker 1: Good morning, everyone. Thank you for joining today's meeting.
|
|
[00:12] Speaker 2: Good morning. I'm looking forward to discussing the new requirements.
|
|
[00:25] Speaker 1: Let's start with the timeline. We need to finalize the scope by Friday.
|
|
[00:38] Speaker 2: Agreed. I'll send a summary of the key points after this call.
|
|
[00:45] Speaker 1: Perfect. If there are no other items, we can wrap up here."""
|
|
|
|
SUMMARY_TEXT = """# Meeting Overview
|
|
## Key Discussion Points
|
|
### Timeline and Scope
|
|
#### Next Steps"""
|
|
|
|
COVER_DATE = "June 14, 2026"
|
|
TRANSCRIPT_DESC = "Transcript of a project planning meeting discussing timelines and scope."
|
|
SUMMARY_DESC = "Summary of a project planning meeting covering key decisions and next steps."
|
|
|
|
|
|
def main():
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
print("Using temp directory:", tmpdir)
|
|
|
|
# 1) Transcript-only
|
|
transcript_path = os.path.join(tmpdir, "TRANSCRIPT_TEST.docx")
|
|
print("Creating transcript-only docx:", transcript_path)
|
|
create_transcript_docx(
|
|
text=TRANSCRIPT_TEXT,
|
|
filename=transcript_path,
|
|
include_cover=True,
|
|
cover_date=COVER_DATE,
|
|
cover_desc=TRANSCRIPT_DESC,
|
|
)
|
|
print("OK: transcript-only created.")
|
|
|
|
# 2) Summary-only
|
|
summary_path = os.path.join(tmpdir, "SUMMARY_TEST.docx")
|
|
print("Creating summary-only docx:", summary_path)
|
|
create_summary_docx(
|
|
text=SUMMARY_TEXT,
|
|
filename=summary_path,
|
|
include_cover=True,
|
|
cover_date=COVER_DATE,
|
|
cover_desc=SUMMARY_DESC,
|
|
)
|
|
print("OK: summary-only created.")
|
|
|
|
# 3) Combined
|
|
combined_path = os.path.join(tmpdir, "COMBINED_TEST.docx")
|
|
print("Creating combined docx:", combined_path)
|
|
create_combined_docx(
|
|
transcript_text=TRANSCRIPT_TEXT,
|
|
summary_text=SUMMARY_TEXT,
|
|
filename=combined_path,
|
|
transcript_cover_date=COVER_DATE,
|
|
transcript_cover_desc=TRANSCRIPT_DESC,
|
|
summary_cover_date=COVER_DATE,
|
|
summary_cover_desc=SUMMARY_DESC,
|
|
)
|
|
print("OK: combined created.")
|
|
|
|
# Basic size sanity checks
|
|
for path in [transcript_path, summary_path, combined_path]:
|
|
size = os.path.getsize(path)
|
|
print(f"File: {os.path.basename(path)} - size: {size} bytes")
|
|
if size < 10000:
|
|
print("WARNING: File seems unusually small:", path)
|
|
|
|
print("\nAll .docx files generated successfully.")
|
|
print("Please open them in Word to verify:")
|
|
print("- Only transcript pages have line numbers.")
|
|
print("- Footer shows 'X of Y' on all pages.")
|
|
print("- Cover pages are centered and use the correct date format.")
|
|
print("- Combined doc order: cover, page break, summary, page break, transcript.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|