Add --raw flag to csv command to skip aggregation

- Add `to_csv_entries()` to output.py: converts raw rows to write_csv
  entries one-for-one, without merging by (project, description)
- Add `--raw` flag to the csv subparser; _cmd_csv branches on it
- Add TestToCsvEntries with 6 tests
- Update README with --raw usage example
- Add .coverage and htmlcov/ to .gitignore
This commit is contained in:
Jef Roosens 2026-05-28 13:07:50 +02:00
parent 91ce81a65f
commit 985ee28113
Signed by: Jef Roosens
GPG key ID: 119385BCAA005C21
6 changed files with 97 additions and 4 deletions

View file

@ -11,6 +11,26 @@ from .projects import resolve_project_task
from .utils import decimal_to_hhmm
def to_csv_entries(rows: list[dict]) -> list[dict]:
"""Convert raw parsed rows to write_csv-compatible entries without aggregating.
Each row becomes its own entry. Open entries (duration_hours is None) are
skipped. Rows are not combined, even if they share the same project and
description.
"""
from .parser import build_description
return [
{
"project": row["project"].strip(),
"description": build_description(row["story"], row["note"]),
"quantity": row["duration_hours"],
}
for row in rows
if row["duration_hours"] is not None
]
def write_csv(
aggregated: list[dict],
output: IO[str],