""" MacroCommand The MacroCommand class is a macro class for all the macro commands for interacting with multiple commands """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from DIRAC import gLogger from DIRAC.ResourceStatusSystem.Command.Command import Command __RCSID__ = "c59810311 (2021-10-01 10:44:25 +0200) Chris Burr " class MacroCommand(Command): """ As of today, it is not used. """ def __init__(self): super(MacroCommand, self).__init__() self.commands = None self.args = None self.clients = None ################################################################################ def setCommands(self, commandsListIn=None): """ Method to be called as first at every MacroCommand instantiation. :params: :attr:`commandsListIn`: a list of command objects """ if not isinstance(commandsListIn, list): commandsListIn = [commandsListIn] self.commands = commandsListIn ################################################################################ def setArgs(self, argsListIn=None): """ Set the arguments of the commands. :params: :attr:`argsListIn`: a list of args tuples, or just a tuple of args """ if not isinstance(argsListIn, list): argsListIn = [argsListIn] self.args = argsListIn commArgs = [] if len(self.args) == len(self.commands): commArgs = [(self.commands[x], self.args[x]) for x in range(len(self.commands))] elif len(self.args) == 1: commArgs = [(self.commands[x], self.args[0]) for x in range(len(self.commands))] else: gLogger.error("Tuples or `args` provided are nor 1 nor the same number of the commands") for command, arg in commArgs: command.setArgs(arg) ################################################################################ def setClient(self, clientListIn=None): """ Set `self.clients`. If not set, a standard client will be instantiated. Then, set the clients used by the commands. :params: :attr:`clientListIn`: a list of client object """ if not isinstance(clientListIn, list): clientListIn = [clientListIn] self.clients = clientListIn commArgs = [] if len(self.clients) == len(self.commands): commArgs = [(self.commands[x], self.clients[x]) for x in range(len(self.commands))] elif len(self.args) == 1: commArgs = [(self.commands[x], self.clients[0]) for x in range(len(self.commands))] else: gLogger.error("`clients` provided are nor 1 nor the same number of the commands") for command, client in commArgs: command.setClient(client) ################################################################################ def doCommand(self): """ Calls command.doCommand for every command in the list of self.commands """ res = [] for command in self.commands: res.append(command.doCommand()) return res