| import pytest |
| from PIL import Image |
|
|
| from unlimited_ocr_rdna4.errors import InferenceError |
| from unlimited_ocr_rdna4.pdf import PDFPageRenderer |
|
|
|
|
| def _make_pdf(path) -> None: |
| image = Image.new("RGB", (120, 80), "white") |
| try: |
| image.save(path, format="PDF", resolution=72) |
| finally: |
| image.close() |
|
|
|
|
| def test_pdf_renders_one_page_at_a_time(tmp_path) -> None: |
| pdf = tmp_path / "fixture.pdf" |
| _make_pdf(pdf) |
| with PDFPageRenderer( |
| pdf, |
| tmp_path, |
| dpi=72, |
| start_page=1, |
| max_pages=1, |
| max_page_pixels=20_000, |
| max_total_pixels=20_000, |
| max_page_rendered_bytes=1_000_000, |
| max_rendered_bytes=1_000_000, |
| ) as renderer: |
| assert tuple(renderer.page_numbers) == (1,) |
| rendered = renderer.render(1) |
| assert rendered.is_file() |
|
|
|
|
| def test_pdf_rejects_page_over_pixel_limit(tmp_path) -> None: |
| pdf = tmp_path / "fixture.pdf" |
| _make_pdf(pdf) |
| with ( |
| PDFPageRenderer( |
| pdf, |
| tmp_path, |
| dpi=72, |
| start_page=1, |
| max_pages=1, |
| max_page_pixels=1_000, |
| max_total_pixels=20_000, |
| max_page_rendered_bytes=1_000_000, |
| max_rendered_bytes=1_000_000, |
| ) as renderer, |
| pytest.raises(InferenceError, match="would render"), |
| ): |
| renderer.render(1) |
|
|