Source code for lories.connectors.tasks.read

# -*- coding: utf-8 -*-
"""
lories.connectors.tasks.read
~~~~~~~~~~~~~~~~~~~~~~~~~~~~


"""

from __future__ import annotations

import inspect
from typing import Optional

import pandas as pd
from lories._core._channel import ChannelState  # noqa
from lories.connectors.tasks.task import ConnectorTask


[docs] class ReadTask(ConnectorTask): # noinspection PyArgumentList
[docs] def run(self, inplace: bool = False, **kwargs) -> Optional[pd.DataFrame]: self._logger.debug( f"Reading {len(self.channels)} channels of '{type(self.connector).__name__}': {self.connector.id}" ) signature = inspect.signature(type(self.connector).read) arguments = [p.name for p in signature.parameters.values() if p.kind == p.POSITIONAL_OR_KEYWORD] for argument in list(kwargs.keys()): if argument not in arguments: value = kwargs.pop(argument) self._logger.warning( f"Trying to read Connector '{self.connector.id}' with unknown argument '{argument}': {value}" ) data = self.connector.read(self.channels, **kwargs) if data is None or data.dropna(axis="columns", how="all").empty: if inplace: self.channels.set_state(ChannelState.NOT_AVAILABLE) return None if inplace: self.channels.set_frame(data) return data