Skip to content

Commit 102f4dd

Browse files
committed
try
1 parent 0db96b5 commit 102f4dd

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

tifeatures/factory.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def create_html_response(
8989

9090

9191
def create_csv_rows(data: Iterable[Dict]) -> Generator[str, None, None]:
92-
"""Create Template response."""
92+
"""Creates an iterator that returns lines of csv from an iterable of dicts."""
9393

9494
class DummyWriter:
9595
"""Dummy writer that implements write for use with csv.writer."""
@@ -98,17 +98,21 @@ def write(self, line: str):
9898
"""Return line."""
9999
return line
100100

101-
"""Creates an iterator that returns lines of csv from an iterable of dicts."""
102-
initial = True
103-
writer = None
101+
# Get the first row and construct the column names
102+
first = next(data) # type: ignore
103+
fieldnames = first.keys()
104+
writer = csv.DictWriter(DummyWriter(), fieldnames=fieldnames)
105+
106+
# Write header
107+
row = dict(zip(fieldnames, fieldnames))
108+
yield writer.writerow(row)
109+
110+
# Write first row
111+
yield writer.writerow(first)
112+
113+
# Write all remaining rows
104114
for row in data:
105-
if initial:
106-
fieldnames = row.keys()
107-
writer = csv.DictWriter(DummyWriter(), fieldnames=fieldnames)
108-
yield writer.writeheader()
109-
initial = False
110-
if writer:
111-
yield writer.writerow(row)
115+
yield writer.writerow(row)
112116

113117

114118
@dataclass

0 commit comments

Comments
 (0)