Source code for projectreport.analyzer.analyzable

from typing import TYPE_CHECKING, Dict, List, Optional, Union

from projectreport.data import AnalysisData
from projectreport.license.model import License
from projectreport.logger import logger
from projectreport.version import Version

if TYPE_CHECKING:
    from projectreport.analyzer.project import Project
    from projectreport.analyzer.analysis import Analysis
    from projectreport.analyzer.parsers.base import Parser

from cached_property import cached_property


[docs]class Analyzable: parser: Optional["Parser"] = None analysis: Optional["Analysis"] = None name: Optional[str] = None
[docs] def __init__(self, path: str, project: Optional["Project"] = None): self.path = path self.project = project
@cached_property def docstring(self) -> Optional[str]: if self.parser is None: return None return self.parser.docstring @cached_property def version(self) -> Optional[Version]: if self.parser is None: return None return self.parser.version @cached_property def topics(self) -> Optional[List[str]]: if self.parser is None: return None return self.parser.topics @cached_property def license(self) -> Optional[License]: if self.parser is None: return None return self.parser.license @cached_property def data(self) -> AnalysisData: if self.analysis is None: raise ValueError( "cannot get data from Analyzable if no analysis is attached" ) logger.debug(f"Getting data for {self.path}") data: AnalysisData = {} data.update(self.analysis.data) data.update( dict( docstring=self.docstring, version=str(self.version) if self.version is not None else None, topics=self.topics, license=self.license.type.value if self.license is not None else None, ) ) if self.name is not None: data.update(dict(name=self.name)) return data