Source code for projectreport.report.project

from typing import TYPE_CHECKING, Dict, Union

from projectreport.data import AnalysisData

if TYPE_CHECKING:
    from projectreport.analyzer.project import Project
    from projectreport.analyzer.folder import Folder

from cached_property import cached_property

from projectreport.report.base import BaseReport


[docs]class ProjectReport(BaseReport):
[docs] def __init__(self, project: "Project", depth: int = 0): self.project = project self.depth = depth
@cached_property def doc(self): from projectreport.report.latex import project_latex_document return project_latex_document(self.data) @cached_property def data(self) -> AnalysisData: data: AnalysisData = {} data.update(self.project.data) if self.depth == 0: return data subprojects_dict: AnalysisData = {} for folder in self.project.folders: folder_data: AnalysisData = {} gather_data(folder, folder_data, remaining_depth=self.depth - 1) subprojects_dict[folder.path] = folder_data data.update({"subprojects": subprojects_dict}) return data
[docs]def gather_data(folder: "Folder", data: dict, remaining_depth: int = 0): data.update(folder.data) if remaining_depth <= 0: return subprojects_dict: AnalysisData = {} for folder in folder.folders: folder_data: AnalysisData = {} gather_data(folder, folder_data, remaining_depth=remaining_depth - 1) subprojects_dict[folder.path] = folder_data data.update({"subprojects": subprojects_dict})