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}"