Source code for basecam.actor.tools
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# @Author: José Sánchez-Gallego (gallegoj@uw.edu)
# @Date: 2019-08-06
# @Filename: commands.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)
import json
import os
from typing import Any, Dict
__all__ = ["get_cameras", "get_schema"]
[docs]
def get_cameras(command, cameras=None, check_cameras=True, fail_command=False):
"""A helper to determine what cameras to use.
Parameters
----------
command
The command that wants to access the cameras.
cameras : list
The list of camera names passed to the command.
check_cameras : bool
If any of the cameras is not connected, returns `False`.
fail_command : bool
Fails the command before returning `False`.
Returns
-------
cameras : list of `.Camera` instances
A list of `.Camera` instances that match the input ``cameras`` or,
if ``cameras=None``, the default cameras. If ``cameras=None`` and
there are no default cameras defined, returns all the connected
camera. If ``check_cameras=True`` and any of the selected cameras
is not connected, the command is failed and returns `False`.
"""
default = command.actor.default_cameras
if not cameras:
if default is None or len(default) == 0:
camera_instances = command.actor.camera_system.cameras
cameras = [camera_instance.name for camera_instance in camera_instances]
else:
cameras = default
camera_instances = []
for camera in cameras:
camera_instance = command.actor.camera_system.get_camera(name=camera)
if camera_instance is False:
if fail_command:
command.fail(text=f"camera {camera} is not connected.")
return False
camera_instances.append(camera_instance)
if check_cameras:
for camera_instance in camera_instances:
if not camera_instance.connected:
if fail_command:
command.fail(
text=f"camera {camera_instance.name} "
"has not been initialised."
)
return False
if len(cameras) == 0:
if fail_command:
command.fail(text="no cameras connected.")
return False
return camera_instances
[docs]
def get_schema() -> Dict[str, Any]:
"""Returns the actor schema as a dictionary."""
schema = json.loads(
open(os.path.join(os.path.dirname(__file__), "schema.json")).read()
)
return schema