Spaces:
Sleeping
Sleeping
File size: 2,034 Bytes
86c402d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
"""
Модуль с фабрикой парсеров для различных форматов документов.
"""
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 |