Source code for projectreport.analyzer.parsers.folder

import abc
from pathlib import Path
from typing import Optional, Sequence

from cached_property import cached_property

from projectreport.analyzer.parsers.base import Parser
from projectreport.analyzer.parsers.data_types import ParserDataType
from projectreport.license.finder import find_license_file
from projectreport.license.model import License
from projectreport.license.parsing import license_text_to_license


[docs]class FolderParser(Parser, abc.ABC): """ :param path: This should be the path of a folder, rather than a path to a file that the singular parsers accept. :param file_names: A list of file names that should be analyzed within the folder. """ data_type = ParserDataType.FOLDER
[docs] def __init__( self, path: str, file_names: Sequence[str], ): self.file_names = file_names super().__init__(path)
[docs] @classmethod def matches_path(cls, path: str, file_names: Sequence[str]) -> bool: return find_license_file(Path(path)) is not None
@cached_property def license(self) -> Optional[License]: license_file = find_license_file(Path(self.path)) if license_file is None: return None license_text = license_file.read_text() return license_text_to_license(license_text)