""" Модуль с фабрикой парсеров для различных форматов документов. """ import logging from .abstract_parser import AbstractParser from .file_types import FileType logger = logging.getLogger(__name__) class ParserFactory: """ Фабрика парсеров документов. Отвечает за выбор подходящего парсера для конкретного документа. """ def __init__(self): """ Инициализирует фабрику парсеров. """ self.parsers: list[AbstractParser] = [] def register_parser(self, parser: AbstractParser) -> None: """ Регистрирует парсер в фабрике. Args: parser (AbstractParser): Парсер для регистрации. """ self.parsers.append(parser) logger.debug(f"Зарегистрирован парсер: {parser.__class__.__name__}") def get_parser(self, file: str | FileType) -> AbstractParser | None: """ Возвращает подходящий парсер для файла. Args: file: Может быть одним из: - str: Путь к файлу для определения подходящего парсера. - FileType: Тип файла для определения подходящего парсера. Returns: AbstractParser | None: Подходящий парсер или None, если такой не найден. """ for parser in self.parsers: if parser.supports_file(file): logger.debug(f"Выбран парсер {parser.__class__.__name__} для файла {file}") return parser logger.warning(f"Не найден подходящий парсер для {file}") return None