def play_command(power_group): """CLI endpoints for managing assets' power states & wallpower""" play_subp = power_group.add_subparsers() folder_action = play_subp.add_parser( "folder", help="Update user-defined script folder") folder_action.add_argument( "-p", "--path", type=str, required=True, help="Path to the folder containing playback scripts", ) list_action = play_subp.add_parser( "list", help="List scripts available for execution") exec_action = play_subp.add_parser("execute", help="Execute a specific script") exec_action.add_argument("-p", "--play", type=str, required=True, help="Name of the play to be executed") # cli actions/callbacks folder_action.set_defaults(func=lambda args: IStateManager.set_play_path( os.path.abspath(os.path.expanduser(args["path"])))) list_action.set_defaults( func=lambda args: display_plays(IStateManager.plays())) exec_action.set_defaults(func=lambda args: IStateManager.execute_play( args["play"]) # TODO: handle invalid play )
def _handle_status_request(self, details): """Get overall system status/details including hardware assets; environment state & play details """ assets = IStateManager.get_system_status(flatten=False) graph_ref = GraphReference() with graph_ref.get_session() as session: stage_layout = GraphReference.get_stage_layout(session) # send system topology and assets' power-interconnections self._write_data( details["client"], ServerToClientRequests.sys_layout, {"assets": assets, "stageLayout": stage_layout}, ) self._write_data( details["client"], ServerToClientRequests.ambient_upd, {"ambient": ISystemEnvironment.get_ambient(), "rising": False}, ) self._write_data( details["client"], ServerToClientRequests.play_list, {"plays": list(itertools.chain(*IStateManager.plays()))}, ) self._write_data( details["client"], ServerToClientRequests.mains_upd, {"mains": ISystemEnvironment.mains_status()}, )