Source code for credsweeper.file_handler.string_content_provider

from functools import cached_property
from typing import List, Optional, Generator

from credsweeper.file_handler.analysis_target import AnalysisTarget
from credsweeper.file_handler.content_provider import ContentProvider


[docs] class StringContentProvider(ContentProvider): """Provider performs scan simple text lines""" def __init__( self, # lines: List[str], # line_numbers: Optional[List[int]] = None, # file_path: Optional[str] = None, # file_type: Optional[str] = None, # info: Optional[str] = None) -> None: """ Parameters: lines: text lines to be processed line_numbers: matched line numbers for lines if the order is not natural. Otherwise, it will be filled with natural order from 1. """ super().__init__(file_path=file_path, file_type=file_type, info=info) self.__lines = lines # fill line numbers only when amounts are equal if line_numbers is None or len(lines) != len(line_numbers): self.__line_numbers = None else: self.__line_numbers = line_numbers @cached_property def data(self) -> bytes: """data getter for StringContentProvider""" raise NotImplementedError(__name__)
[docs] def free(self) -> None: """free data after scan to reduce memory usage""" self.__lines = [] if "lines" in self.__dict__: delattr(self, "lines") self.__line_numbers = [] if "line_numbers" in self.__dict__: delattr(self, "line_numbers")
@cached_property def lines(self) -> List[str]: """line_numbers RO getter for StringContentProvider""" return self.__lines @cached_property def line_numbers(self) -> List[int]: """line_numbers RO getter for StringContentProvider""" if self.__line_numbers is None or len(self.__lines) != len(self.__line_numbers): self.__line_numbers = list(range(1, 1 + len(self.__lines))) if self.__lines else [] return self.__line_numbers
[docs] def yield_analysis_target(self, min_len: int) -> Generator[AnalysisTarget, None, None]: """Return lines to scan. Args: min_len: minimal line length to scan Return: list of analysis targets based on every row in file """ return self.lines_to_targets(min_len, self.lines, self.line_numbers)