Source code for fastcs.attribute_io

from typing import Any, Generic, cast, get_args

from fastcs.attribute_io_ref import AttributeIORef, AttributeIORefT
from fastcs.attributes import AttrR, AttrRW
from fastcs.datatypes import T
from fastcs.tracer import Tracer


[docs] class AttributeIO(Generic[T, AttributeIORefT], Tracer): """Base class for performing IO for an ``Attribute`` This class should be inherited to implement reading and writing values from ``Attributes`` via some API. For read, ``Attribute``s implement the ``update`` method and for write, ``Attribute`` implement the ``send`` method. Concrete implementations of this class must be parameterised with a specific ``AttributeIORef`` that defines exactly what part of the API the ``Attribute`` corresponds to. See the docstring for ``AttributeIORef`` for more information. """ ref_type = AttributeIORef def __init_subclass__(cls) -> None: # sets ref_type from subclass generic args # from python 3.12 we can use types.get_original_bases args = get_args(cast(Any, cls).__orig_bases__[0]) cls.ref_type = args[1] async def update(self, attr: AttrR[T, AttributeIORefT]) -> None: raise NotImplementedError() async def send(self, attr: AttrRW[T, AttributeIORefT], value: T) -> None: raise NotImplementedError()
AnyAttributeIO = AttributeIO[T, AttributeIORef]