Source code for pyobs.mixins.camerasettings

from __future__ import annotations

import logging
from typing import Any, cast

from pyobs.interfaces import IBinning, IData, IFilters, IWindow
from pyobs.modules import Module

log = logging.getLogger(__name__)


class CameraSettingsMixin:
    """Mixin for a device that should be able to set camera settings."""

    __module__ = "pyobs.mixins"

    def __init__(
        self,
        filters: str | IFilters | None = None,
        filter_name: str | None = None,
        binning: int | None = None,
        **kwargs: Any,
    ):
        """Initializes the mixin.

        Args:
            filters: Filter wheel module.
            filter: Filter to set.
            binning: Binning to set.
        """

        # store
        self.__camerasettings_filters = filters
        self.__camerasettings_filter = filter_name
        self.__camerasettings_binning = binning

[docs] async def _do_camera_settings(self, camera: Module | IData | IFilters | IBinning | IWindow) -> None: """Do camera settings for given camera.""" # check type if not isinstance(self, Module) or not isinstance(self, CameraSettingsMixin): raise ValueError("This is not a module") # filter if self.__camerasettings_filters is not None and self.__camerasettings_filter is not None: # get proxy async with cast(Module, cast(object, self)).proxy(self.__camerasettings_filters, IFilters) as proxy: log.info("Setting filter to %s...", self.__camerasettings_filter) await proxy.set_filter(self.__camerasettings_filter) # camera settings if self.__camerasettings_binning is not None and isinstance(camera, IBinning): log.info("Setting binning to %dx%d...", self.__camerasettings_binning, self.__camerasettings_binning) await camera.set_binning(self.__camerasettings_binning, self.__camerasettings_binning) if isinstance(camera, IWindow): log.info("Set window to full frame...") cap = camera.get_capabilities(IWindow) if cap is not None: await camera.set_window(cap.full_frame_x, cap.full_frame_y, cap.full_frame_width, cap.full_frame_height) else: raise ValueError("Could not get full frame size.")
__all__ = ["CameraSettingsMixin"]