from __future__ import annotations
from abc import ABCMeta, abstractmethod
from dataclasses import dataclass, field
from typing import Any
from ..utils.time import Time
from .interface import Interface
@dataclass
class ModeState:
modes: dict[str, str] = field(default_factory=dict) # group -> current mode
time: Time = field(default_factory=Time.now)
@dataclass
class ModeCapabilities:
modes: dict[str, list[str]] = field(default_factory=dict) # group -> list of modes
class IMode(Interface, metaclass=ABCMeta):
"""The module can change modes in a device."""
__module__ = "pyobs.interfaces"
state = ModeState
capabilities = ModeCapabilities
[docs]
@abstractmethod
async def set_mode(self, mode: str, group: str = "", **kwargs: Any) -> None:
"""Set the current mode.
Args:
mode: Name of mode to set.
group: Name of the group to set the mode for.
Raises:
ValueError: If an invalid mode or group was given.
MoveError: If mode selector cannot be moved.
"""
...
__all__ = ["IMode", "ModeState", "ModeCapabilities"]