"""Base parser and config class.""" from abc import abstractmethod from pathlib import Path from typing import Dict, List, Optional, Union class BaseParser: """Base class for all parsers.""" def __init__(self, parser_config: Optional[Dict] = None): """Init params.""" self._parser_config = parser_config def init_parser(self) -> None: """Init parser and store it.""" parser_config = self._init_parser() self._parser_config = parser_config @property def parser_config_set(self) -> bool: """Check if parser config is set.""" return self._parser_config is not None @property def parser_config(self) -> Dict: """Check if parser config is set.""" if self._parser_config is None: raise ValueError("Parser config not set.") return self._parser_config @abstractmethod def _init_parser(self) -> Dict: """Initialize the parser with the config.""" @abstractmethod def parse_file(self, file: Path, errors: str = "ignore") -> Union[str, List[str]]: """Parse file."""