Add report data models
This commit is contained in:
70
src/py_dvt_ate/reporting/models.py
Normal file
70
src/py_dvt_ate/reporting/models.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Data models for report generation.
|
||||
|
||||
This module defines dataclasses for report configuration and data structures
|
||||
used throughout the reporting pipeline.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from py_dvt_ate.data.models import TestResult, TestRun
|
||||
|
||||
|
||||
@dataclass
|
||||
class ReportConfig:
|
||||
"""Configuration for report generation.
|
||||
|
||||
Attributes:
|
||||
company_name: Company name to display in report header.
|
||||
logo_path: Path to company logo image file (optional).
|
||||
include_charts: Whether to include charts in the report.
|
||||
chart_dpi: DPI for chart images (higher = better quality but larger file).
|
||||
"""
|
||||
|
||||
company_name: str = "py_dvt_ate"
|
||||
logo_path: Path | None = None
|
||||
include_charts: bool = True
|
||||
chart_dpi: int = 150
|
||||
|
||||
|
||||
@dataclass
|
||||
class ReportData:
|
||||
"""Data container for report generation.
|
||||
|
||||
Contains all data needed to generate a test report including
|
||||
test run metadata, results, measurements, and generated charts.
|
||||
|
||||
Attributes:
|
||||
run: Test run metadata.
|
||||
results: List of test results with pass/fail status.
|
||||
measurements: DataFrame of time-series measurements (optional).
|
||||
charts: Dictionary mapping chart names to base64-encoded PNG images.
|
||||
config: Report configuration settings.
|
||||
"""
|
||||
|
||||
run: TestRun
|
||||
results: list[TestResult]
|
||||
measurements: pd.DataFrame | None = None
|
||||
charts: dict[str, str] = field(default_factory=dict)
|
||||
config: ReportConfig = field(default_factory=ReportConfig)
|
||||
|
||||
@property
|
||||
def passed_count(self) -> int:
|
||||
"""Count of results that passed."""
|
||||
return sum(1 for r in self.results if r.passed is True)
|
||||
|
||||
@property
|
||||
def failed_count(self) -> int:
|
||||
"""Count of results that failed."""
|
||||
return sum(1 for r in self.results if r.passed is False)
|
||||
|
||||
@property
|
||||
def overall_status(self) -> str:
|
||||
"""Overall test status: PASS, FAIL, or ERROR."""
|
||||
if self.run.status.value == "error":
|
||||
return "ERROR"
|
||||
if self.failed_count > 0:
|
||||
return "FAIL"
|
||||
return "PASS"
|
||||
Reference in New Issue
Block a user