diff --git a/sqlite_utils/utils.py b/sqlite_utils/utils.py index 3145a6f..06404eb 100644 --- a/sqlite_utils/utils.py +++ b/sqlite_utils/utils.py @@ -373,6 +373,8 @@ def rows_from_file( raise TypeError( "rows_from_file() requires a file-like object that supports peek(), such as io.BytesIO" ) + if not first_bytes: + return (), Format.CSV if first_bytes.startswith((b"[", b"{")): # TODO: Detect newline-JSON return rows_from_file(buffered, format=Format.JSON) diff --git a/tests/test_rows_from_file.py b/tests/test_rows_from_file.py index 8c080d6..3de3582 100644 --- a/tests/test_rows_from_file.py +++ b/tests/test_rows_from_file.py @@ -20,6 +20,13 @@ def test_rows_from_file_detect_format(input, expected_format): assert rows_list == [{"id": "1", "name": "Cleo"}] +@pytest.mark.parametrize("input", (b"", b" \n\t")) +def test_rows_from_file_empty_input(input): + rows, format = rows_from_file(BytesIO(input)) + assert format == Format.CSV + assert list(rows) == [] + + @pytest.mark.parametrize( "ignore_extras,extras_key,expected", (