Files
crab/dataset.py
Karma Riuk 282f29520b since there are multiple jacoco.xml files
possible and it's too hard to understand which one
is the correct one for the class, I just log in
the coverages each one that have the fully
qualified class that is commented, it will then be
up to us to filter out what's needed
2025-03-21 13:44:58 +01:00

41 lines
1.4 KiB
Python

from dataclasses import dataclass, field
from typing import Dict, List
import json
@dataclass
class FileData:
path: str
content: str = "" # Not sure about this, maybe we should just keep the path and extract the contents dynamically (boh)
@dataclass
class Metadata:
repo: str # the name of the repo, with style XXX/YYY
pr_number: int
merge_commit_sha: str # to checkout for the tests
commented_file : str
commented_file_coverages: Dict[str, float] = field(default_factory=dict)
successful: bool = True
build_system: str = ""
reason_for_failure: str = ""
last_cmd_error_msg: str = ""
@dataclass
class DatasetEntry:
metadata: Metadata
files: Dict[str, FileData] # filename -> file data, files before the PR (before the first PR commits)
diffs_before: Dict[str, str] # filename -> diff, diffs between the opening of the PR and the comment
comment: str
diffs_after: Dict[str, str] # filename -> diff, changes after the comment
@dataclass
class Dataset:
entries: List[DatasetEntry] = field(default_factory=list)
def __len__(self) -> int:
return sum(1 for entry in self.entries if entry.metadata.successful)
def to_json(self, filename: str):
"""Serialize the dataset to a JSON file"""
with open(filename, "w", encoding="utf-8") as f:
json.dump(self, f, default=lambda o: o.__dict__, indent=4)