Source code for lories._core._converter
# -*- coding: utf-8 -*-
"""
lories._core._converter
~~~~~~~~~~~~~~~~~~~~~~~
"""
from __future__ import annotations
from abc import abstractmethod
from typing import Any, Collection, Generic, Optional, Type, TypeAlias, TypeVar, overload
import pandas as pd
from lories._core._channel import Channel
from lories._core._channels import Channels
from lories._core._registrator import _Registrator, _RegistratorContext
from lories._core.typing import Timestamp
T = TypeVar("T", bound=Any)
[docs]
class _Converter(_Registrator, Generic[T]):
INCLUDES: Collection[str] = ()
TYPE: str = "converter"
@property
@abstractmethod
def dtype(self) -> Type[T]: ...
@abstractmethod
def is_dtype(self, value: Any) -> bool: ...
@abstractmethod
def to_dtype(self, value: Any, **kwargs) -> Optional[T]: ...
@overload
def to_str(self, value: T) -> str: ...
@overload
def to_str(self, value: pd.Series) -> str: ...
def to_str(self, value: T | pd.Series) -> str:
return self.to_json(value)
@overload
def to_json(self, value: T) -> str: ...
@overload
def to_json(self, value: pd.Series) -> str: ...
@overload
def to_json(self, value: pd.DataFrame) -> str: ...
@abstractmethod
def to_json(self, data: T | pd.Series | pd.DataFrame) -> str: ...
@abstractmethod
def to_series(
self,
value: T,
timestamp: Optional[Timestamp] = None,
name: Optional[str] = None,
) -> pd.Series: ...
@abstractmethod
def from_frame(
self,
data: pd.DataFrame,
channels: Channels,
) -> pd.DataFrame: ...
@abstractmethod
def from_series(
self,
data: pd.Series,
channel: Channel,
) -> pd.Series: ...
@abstractmethod
def convert(self, value: Any, **kwargs) -> Optional[T]: ...
Converter = TypeVar("Converter", bound=_Converter)
# noinspection PyAbstractClass
[docs]
class _ConverterContext(_RegistratorContext[Converter]):
TYPE: str = "converters"
ConverterContext = TypeVar(
name="ConverterContext",
bound=_ConverterContext,
)
Converters: TypeAlias = ConverterContext