You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/tools/ui_reports_generator/common_all.py

61 lines
1.5 KiB

from __future__ import annotations
import logging
from dataclasses import dataclass, asdict
from pathlib import Path
from typing import Any
AnyDict = dict[Any, Any]
@dataclass
class BranchInfo:
name: str
branch_link: str
pull_request_number: int
pull_request_name: str
pull_request_link: str
last_commit_sha: str
last_commit_timestamp: int
last_commit_datetime: str
job_infos: dict[str, JobInfo]
@classmethod
def from_dict(cls, data: AnyDict) -> BranchInfo:
self = BranchInfo(**data)
# Need to transform job_info dict to JobInfo objects,
# as that was not done automatically by dataclass
self.job_infos = {
job_name: JobInfo.from_dict(job_info_dict) # type: ignore
for job_name, job_info_dict in self.job_infos.items()
}
return self
def to_dict(self) -> AnyDict:
return asdict(self)
@dataclass
class JobInfo:
name: str
link: str
status: str | None = None
diff_screens: int | None = None
@classmethod
def from_dict(cls, data: AnyDict) -> JobInfo:
return JobInfo(**data)
def to_dict(self) -> AnyDict:
return asdict(self)
def get_logger(name: str, log_file_path: str | Path) -> logging.Logger:
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
log_handler = logging.FileHandler(log_file_path)
log_formatter = logging.Formatter("%(asctime)s %(message)s")
log_handler.setFormatter(log_formatter)
logger.addHandler(log_handler)
return logger