Skip to content

Commit 4a8a77f

Browse files
committed
Improve CSV output
1 parent 1db2417 commit 4a8a77f

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/manage/list_command.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,22 +139,30 @@ def format_table(cmd, installs):
139139

140140
def _csv_filter_and_expand(installs):
141141
for i in installs:
142-
i = {k: v for k, v in i.items() if k not in CSV_EXCLUDE}
143-
to_expand = {k: i.pop(k, ()) for k in CSV_EXPAND}
144-
yield i
145-
for k2, vlist in to_expand.items():
146-
for vv in vlist:
147-
yield {f"{k2}.{k}": v for k, v in vv.items()}
142+
filtered = {}
143+
to_expand = {k: [] for k in CSV_EXPAND}
144+
for k, v in i.items():
145+
if k in CSV_EXCLUDE:
146+
continue
147+
elif k in to_expand:
148+
for vv in v:
149+
expanded = {f"{k}.{k2}": vvv for k2, vvv in vv.items()}
150+
to_expand[k].append(expanded)
151+
else:
152+
filtered[k] = v
153+
154+
yield filtered
155+
for k in CSV_EXPAND:
156+
for expanded in to_expand[k]:
157+
yield filtered | expanded
148158

149159

150160
def format_csv(cmd, installs):
151161
import csv
152162
installs = list(_csv_filter_and_expand(installs))
153163
if not installs:
154164
return
155-
s = set()
156-
columns = [c for i in installs for c in i
157-
if c not in s and (s.add(c) or True)]
165+
columns = list(dict.fromkeys(col for i in installs for col in i))
158166
writer = csv.DictWriter(sys.stdout, columns)
159167
writer.writeheader()
160168
writer.writerows(installs)

0 commit comments

Comments
 (0)