from __future__ import annotations
from abc import ABCMeta, abstractmethod
from dataclasses import dataclass, field
from enum import StrEnum
from typing import Any
from ..utils.time import Time
from .interface import Interface
[docs]
class TrackingMode(StrEnum):
"""Discrete, hardware-native tracking rate."""
SIDEREAL = "sidereal"
SOLAR = "solar"
LUNAR = "lunar"
OFF = "off"
[docs]
@dataclass
class TrackingModeState:
mode: TrackingMode
time: Time = field(default_factory=Time.now)
[docs]
@dataclass
class TrackingModeCapabilities:
modes: list[TrackingMode]
class ITrackingMode(Interface, metaclass=ABCMeta):
"""The module supports switching between discrete, hardware-native tracking rates."""
__module__ = "pyobs.interfaces"
state = TrackingModeState
capabilities = TrackingModeCapabilities
[docs]
@abstractmethod
async def set_tracking_mode(self, mode: TrackingMode, **kwargs: Any) -> None:
"""Switches to the given tracking mode.
Args:
mode: Tracking mode to switch to.
Raises:
MoveError: If mode could not be set.
InvalidArgumentError: If mode is not in this module's capabilities.
"""
...
__all__ = ["ITrackingMode", "TrackingMode", "TrackingModeState", "TrackingModeCapabilities"]