diff --git a/packages/markitdown/src/markitdown/converters/_csv_converter.py b/packages/markitdown/src/markitdown/converters/_csv_converter.py index 331b0712a3..fcfb15668a 100644 --- a/packages/markitdown/src/markitdown/converters/_csv_converter.py +++ b/packages/markitdown/src/markitdown/converters/_csv_converter.py @@ -2,6 +2,7 @@ import io import re from typing import BinaryIO, Any +from warnings import warn from charset_normalizer import from_bytes from .._base_converter import DocumentConverter, DocumentConverterResult from .._stream_info import StreamInfo @@ -105,6 +106,11 @@ def convert( _trim_outer_blank_rows(rows) if not rows: + warn( + "CSV input is empty or contains only blank rows; producing empty markdown.", + UserWarning, + stacklevel=2, + ) return DocumentConverterResult(markdown="") # Pad all rows, including the header, to preserve the widest row. diff --git a/packages/markitdown/tests/test_csv.py b/packages/markitdown/tests/test_csv.py index d21742bfbc..20d5398fc3 100644 --- a/packages/markitdown/tests/test_csv.py +++ b/packages/markitdown/tests/test_csv.py @@ -6,7 +6,6 @@ from markitdown import MarkItDown, StreamInfo - # Record separators @@ -72,10 +71,20 @@ def test_csv_long_blank_runs(position: str) -> None: "all": blank, }[position] - result = MarkItDown(enable_plugins=False).convert_stream( - io.BytesIO(content), - stream_info=StreamInfo(extension=".csv", charset="utf-8"), - ) + if position == "all": + with pytest.warns( + UserWarning, + match="CSV input is empty or contains only blank rows", + ): + result = MarkItDown(enable_plugins=False).convert_stream( + io.BytesIO(content), + stream_info=StreamInfo(extension=".csv", charset="utf-8"), + ) + else: + result = MarkItDown(enable_plugins=False).convert_stream( + io.BytesIO(content), + stream_info=StreamInfo(extension=".csv", charset="utf-8"), + ) expected = ( "| name | value | |\n" @@ -138,8 +147,13 @@ def test_csv_blank_lines_between_rows_are_kept() -> None: ) -def test_csv_all_blank_input_returns_empty_markdown() -> None: - result = _convert_csv(b"\n\n\n") +@pytest.mark.parametrize("data", [b"", b"\n\n\n"]) +def test_csv_empty_input_warns_and_returns_empty_markdown(data: bytes) -> None: + with pytest.warns( + UserWarning, + match="CSV input is empty or contains only blank rows", + ): + result = _convert_csv(data) assert result == ""