Spaces:
Sleeping
Sleeping
""" | |
Модуль с фабрикой парсеров для различных форматов документов. | |
""" | |
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 |