|
28 | 28 | from unstructured.documents.elements import ( |
29 | 29 | Element, |
30 | 30 | ElementMetadata, |
| 31 | + EmailAddress, |
31 | 32 | Image, |
32 | 33 | ListItem, |
33 | 34 | NarrativeText, |
@@ -797,3 +798,52 @@ def last_modified_prop_(self, request: FixtureRequest): |
797 | 798 | @pytest.fixture() |
798 | 799 | def metadata_file_path_prop_(self, request: FixtureRequest): |
799 | 800 | return property_mock(request, PptxPartitionerOptions, "metadata_file_path") |
| 801 | + |
| 802 | + |
| 803 | +@pytest.mark.parametrize("input_kind", ["filename", "file"]) |
| 804 | +def test_partition_pptx_preserves_email_slide_and_depth_metadata(tmp_path, input_kind): |
| 805 | + presentation = pptx.Presentation() |
| 806 | + for slide_number in range(2): |
| 807 | + slide = presentation.slides.add_slide(presentation.slide_layouts[1]) |
| 808 | + title_frame = slide.shapes.title.text_frame |
| 809 | + title_frame.text = "First heading" |
| 810 | + title_frame.add_paragraph().text = f"title{slide_number}@example.com" |
| 811 | + title_frame.add_paragraph().text = "Next heading" |
| 812 | + body_frame = slide.placeholders[1].text_frame |
| 813 | + body_frame.text = f"body{slide_number}@example.com" |
| 814 | + body_frame.paragraphs[0].level = 2 |
| 815 | + |
| 816 | + filename = tmp_path / "emails.pptx" |
| 817 | + presentation.save(filename) |
| 818 | + kwargs = ( |
| 819 | + {"filename": str(filename)} |
| 820 | + if input_kind == "filename" |
| 821 | + else { |
| 822 | + "file": io.BytesIO(filename.read_bytes()), |
| 823 | + "metadata_filename": filename.name, |
| 824 | + } |
| 825 | + ) |
| 826 | + elements = partition_pptx( |
| 827 | + **kwargs, |
| 828 | + starting_page_number=10, |
| 829 | + include_page_breaks=False, |
| 830 | + metadata_last_modified="2024-04-02T20:32:35", |
| 831 | + languages=["eng"], |
| 832 | + ) |
| 833 | + |
| 834 | + emails = [element for element in elements if isinstance(element, EmailAddress)] |
| 835 | + assert [(e.text, e.metadata.page_number, e.metadata.category_depth) for e in emails] == [ |
| 836 | + ("title0@example.com", 10, 1), |
| 837 | + ("body0@example.com", 10, 2), |
| 838 | + ("title1@example.com", 11, 1), |
| 839 | + ("body1@example.com", 11, 2), |
| 840 | + ] |
| 841 | + assert all(e.metadata.filename == filename.name for e in emails) |
| 842 | + assert all(e.metadata.last_modified == "2024-04-02T20:32:35" for e in emails) |
| 843 | + titles = [element for element in elements if isinstance(element, Title)] |
| 844 | + assert [(e.text, e.metadata.category_depth) for e in titles] == [ |
| 845 | + ("First heading", 0), |
| 846 | + ("Next heading", 1), |
| 847 | + ("First heading", 0), |
| 848 | + ("Next heading", 1), |
| 849 | + ] |
0 commit comments