Skip to content

Commit 5449079

Browse files
authored
fix: error on empty iterable when writing stream (#205)
1 parent 31ac754 commit 5449079

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

colandr/lib/fileio/tabular.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import csv
22
import io
33
import itertools
4+
import logging
45
import typing as t
56
from collections.abc import Iterable, Sequence
67

78

9+
LOGGER = logging.getLogger(__name__)
10+
11+
812
def read(data: str, *, dialect: str = "excel", **kwargs) -> Iterable[list[str]]:
913
with io.StringIO(data) as f:
1014
reader = csv.reader(f, dialect, **kwargs)
@@ -35,9 +39,16 @@ def write_stream(
3539
Reference:
3640
https://stackoverflow.com/questions/32608265/streaming-a-generated-csv-with-flask
3741
"""
38-
iter_rows = iter(rows)
39-
first_row = next(iter_rows)
40-
rows_ = itertools.chain((first_row,), iter_rows)
42+
try:
43+
iter_rows = iter(rows)
44+
first_row = next(iter_rows)
45+
rows_ = itertools.chain((first_row,), iter_rows)
46+
except StopIteration:
47+
LOGGER.warning("no rows available to be written as a stream")
48+
writer = csv.writer(DummyWriter(), dialect, **kwargs)
49+
yield writer.writerow(cols)
50+
return
51+
4152
if isinstance(first_row, dict):
4253
writer = csv.DictWriter(DummyWriter(), cols, dialect=dialect, **kwargs)
4354
yield writer.writeheader()

0 commit comments

Comments
 (0)