Source code for hal.actor.actor
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @Author: José Sánchez-Gallego (gallegoj@uw.edu)
# @Date: 2021-01-21
# @Filename: actor.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)
from __future__ import annotations
import os
from typing import TypeVar
from clu.legacy import LegacyActor
from hal import __version__
__all__ = ["HALActor", "ActorHelpers"]
T = TypeVar("T", bound="HALActor")
[docs]class HALActor(LegacyActor):
"""HAL actor."""
def __init__(self, *args, **kwargs):
schema = kwargs.pop("schema", None)
schema = schema or os.path.join(os.path.dirname(__file__), "../etc/schema.json")
super().__init__(*args, schema=schema, **kwargs)
self.observatory = os.environ.get("OBSERVATORY", "APO")
self.version = __version__
self.helpers = ActorHelpers(self)
[docs]class ActorHelpers:
"""State helpers."""
def __init__(self, actor: HALActor):
from hal.helpers import (
APOGEEHelper,
BOSSHelper,
FFSHelper,
HALHelper,
LampsHelper,
Scripts,
TCCHelper,
)
from hal.macros import all_macros
self.apogee = APOGEEHelper(actor)
self.boss = BOSSHelper(actor)
self.ffs = FFSHelper(actor)
self.lamps = LampsHelper(actor)
self.tcc = TCCHelper(actor)
self.bypasses: set[str] = set(actor.config["bypasses"])
self._available_bypasses = ["all"]
self._available_bypasses += [
helper.name
for helper in HALHelper.__subclasses__()
if helper.name is not None
]
self.scripts = Scripts(actor, actor.config["scripts"])
self.macros = {macro.name: macro for macro in all_macros}