Source code for realtime.receive.core.antenna_utils

from typing import Dict, Optional, Sequence, Tuple, Union

from realtime.receive.core.antenna import Antenna
from realtime.receive.core.common import from_dict, load_json_resource


def _load_antennas_from_dicts(
    antennas_dicts: Sequence[Dict],
) -> Tuple[Antenna]:
    return tuple(from_dict(Antenna, data=data) for data in antennas_dicts)


def _load_antennas_from_file(antennas_file: str) -> Optional[Tuple[Antenna]]:
    """
    load the antennas from a json dictionary. It is possible
    that the interface may have changed.

    TODO:@steve-ord maybe add some schema validation


    """
    antennas_dict = load_json_resource(antennas_file)

    if "antennas" in antennas_dict:
        return _load_antennas_from_dicts(antennas_dict["antennas"])
    if "receptors" in antennas_dict:
        return _load_antennas_from_dicts(antennas_dict["receptors"])
    return None


[docs] def load_antennas(antennas: Union[str, Sequence[Dict]]) -> Tuple[Antenna]: """ Loads antennas from a sequence of dictionaries, or a file containing them. :param antennas: A sequence of dictionaries, each capable of constructing an Antenna object. If a string is given instead, it is the route to a file with a JSON object whose top-level object has an "antennas" member with such a sequence of dictionaries. """ if isinstance(antennas, str): return _load_antennas_from_file(antennas) return _load_antennas_from_dicts(antennas)