| import Arguments | 
 | import Util | 
 |  | 
 | class Job(object): | 
 |     """Job - A set of commands to execute as a single task.""" | 
 |  | 
 |     def iterjobs(self): | 
 |         abstract | 
 |  | 
 | class Command(Job): | 
 |     """Command - Represent the information needed to execute a single | 
 |     process. | 
 |      | 
 |     This currently assumes that the executable will always be the | 
 |     first argument.""" | 
 |  | 
 |     def __init__(self, executable, args): | 
 |         assert Util.all_true(args, lambda x: isinstance(x, str)) | 
 |         self.executable = executable | 
 |         self.args = args | 
 |  | 
 |     def __repr__(self): | 
 |         return Util.prefixAndPPrint(self.__class__.__name__, | 
 |                                     (self.executable, self.args)) | 
 |      | 
 |     def getArgv(self): | 
 |         return [self.executable] + self.args | 
 |  | 
 |     def iterjobs(self): | 
 |         yield self | 
 |      | 
 | class PipedJob(Job): | 
 |     """PipedJob - A sequence of piped commands.""" | 
 |  | 
 |     def __init__(self, commands): | 
 |         assert Util.all_true(commands, lambda x: isinstance(x, Arguments.Command)) | 
 |         self.commands = list(commands) | 
 |  | 
 |     def addJob(self, job): | 
 |         assert isinstance(job, Command) | 
 |         self.commands.append(job) | 
 |  | 
 |     def __repr__(self): | 
 |         return Util.prefixAndPPrint(self.__class__.__name__, (self.commands,)) | 
 |  | 
 | class JobList(Job): | 
 |     """JobList - A sequence of jobs to perform.""" | 
 |  | 
 |     def __init__(self, jobs=[]): | 
 |         self.jobs = list(jobs) | 
 |      | 
 |     def addJob(self, job): | 
 |         self.jobs.append(job) | 
 |  | 
 |     def __repr__(self): | 
 |         return Util.prefixAndPPrint(self.__class__.__name__, (self.jobs,)) | 
 |  | 
 |     def iterjobs(self): | 
 |         for j in self.jobs: | 
 |             yield j |