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