Source code for projectreport.report.report

import datetime
from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Sequence, Union

from cached_property import cached_property

if TYPE_CHECKING:
    from projectreport.analyzer.project import Project

from projectreport.report.base import BaseReport
from projectreport.report.project import ProjectReport


[docs]class Report(BaseReport): """ Pass Projects to create a report of the analysis of the projects. """
[docs] def __init__(self, projects: Sequence["Project"], depth: int = 0): self.project_reports = [ ProjectReport(project, depth=depth) for project in projects ]
@cached_property def data(self) -> List[dict]: items = [report.data for report in self.project_reports] items.sort(key=_created_then_name_key) return items @cached_property def doc(self): from projectreport.report.latex import multi_project_latex_document return multi_project_latex_document(self.data)
[docs] def sort(self, key: Optional[Callable[[dict], str]] = None, reverse: bool = False): self.data.sort(key=key, reverse=reverse)
[docs] def default_sort(self): self.data.sort(key=_created_then_name_key)
def _created_then_name_key(data: dict) -> str: created: Optional[datetime.datetime] = data["created"] if created is None: created_str = "0000-00-00 00:00:00.000000" else: created_str = created.strftime("%Y-%m-%d %H:%M:%S.%f") name: str = data["name"] return f"{created_str}_{name}"