feat(formatter): unify data pipeline with ReportRow and report_builder

This commit is contained in:
Кокос Артем Николаевич
2026-01-24 16:09:25 +07:00
parent 245ea0a3fa
commit e344715f61
8 changed files with 194 additions and 234 deletions

View File

@@ -1,40 +1,22 @@
import csv
import io
from typing import List, Tuple
from redminelib.resources import Issue
from .formatter import get_version, hours_to_human, STATUS_TRANSLATION
from typing import List
from .types import ReportRow
def format_csv(
issue_hours: List[Tuple[Issue, float]],
fill_time: bool = True,
dialect: str = "excel"
) -> str:
"""
Formats the list of issues with spent time into CSV.
Returns a string containing the CSV content.
"""
def format_csv(rows: List[ReportRow]) -> str:
output = io.StringIO()
writer = csv.writer(output, dialect=dialect)
# Header
writer = csv.writer(output, dialect="excel")
writer.writerow(["Project", "Version", "Issue ID", "Subject", "Status", "Spent Time"])
for issue, hours in issue_hours:
project = str(issue.project)
version = get_version(issue)
status_en = str(issue.status)
status_ru = STATUS_TRANSLATION.get(status_en, status_en)
time_text = hours_to_human(hours) if fill_time else ""
for r in rows:
writer.writerow([
project,
version,
issue.id,
issue.subject,
status_ru,
time_text
r["project"],
r["version"],
r["issue_id"],
r["subject"],
r["status_ru"],
r["time_text"]
])
return output.getvalue()