"""Module for the IParse interface.""" import typing as tp from abc import ABC, abstractmethod from pathlib import Path import pandas as pd # type: ignore __all__ = ["IParse"] class IParse(ABC): """Interface for parsing data from a file. This interface defines the structure for classes responsible for parsing data from various file formats. Implementing classes should provide a concrete implementation of the `_parse` method to handle the parsing logic. Attributes: _features (str): The type of data this parser is designed for (e.g., GPS, Glonass, Beidou, etc.). Methods: __init__(self, features: str | None) -> None: Initialize an IParse instance with the specified features type. __repr__(self) -> str: Return a string representation of the IParse instance, including its features type. parse(self, file: str) -> tp.Tuple[pd.Series, pd.DataFrame]: [Abstract Method] Parse data from a file and return a tuple containing metadata (as a pd.Series) and data (as a pd.DataFrame). __call__(self, filepath: Path) -> Any: Call method for parsing data from a file using the `_parse` method. Example: ```python class MyCustomParser(IParse): def __init__(self, features: str | None): super().__init__(features) def _parse(self, file: str) -> tp.Tuple[pd.Series, pd.DataFrame]: # Implement the parsing logic here # Return metadata and data as pd.Series and pd.DataFrame, respectively pass # Create an instance of the custom parser custom_parser = MyCustomParser("GPS") # Parse data from a file parsed_data = custom_parser(Path("datafile.dat")) ``` """ def __init__(self, features: str | None) -> None: """Initialize an IParse instance with the specified features type. Args: features (str | None): The type of data this parser is designed for (e.g., GPS, Glonass, Beidou, etc.). If not provided, the default value is "NoneType." """ # Type of iparser (e.g. GPS, Glonass, Biedu etc.) self._features = features if features else "NoneType" super().__init__() def __repr__(self) -> str: """Return a string representation of the IParse instance, including its features type. Returns: str: A string representation of the object. """ return f"Iparser({self._features})" if self._features else "Iparser()" @abstractmethod def parse(self, filename: Path, **kwargs) -> tp.Tuple[pd.Series, pd.DataFrame]: """[Abstract Method] Parse data from a file. Args: filename (path): The path to the file to be parsed. kwargs: Additional keyword arguments to pass to the parser. Returns: tp.Tuple[pd.Series, pd.DataFrame]: A tuple containing parsed metadata (as a pd.Series) and data (as a pd.DataFrame). """ pass def __call__(self, filepath: Path, **kwargs) -> tp.Tuple[pd.Series, pd.DataFrame]: """Call method for parsing data from a file using the `_parse` method. Args: filepath (Path): The path to the file to be parsed. kwargs: Additional keyword arguments to pass to the parser. Returns: Any: The result of the parsing operation, typically a tuple containing metadata and data. """ return self.parse(filepath, **kwargs)