def getJob(self): 'Return the next job on the queue to execute, removing it from queue' if self.runningJob!=None: logging.warning("Call of getJob() while a job is running - returning None") return None # Remove any shake jobs that are unneeded for id,j in self.jobs.items(): if j['type']=='shake' and len(j['prereqs'])==0 and j['sample'].isMixed() and not Experiment.shakerIsActive(): #print "Removing unneeded shake job ",id self.removeJob(id) for id in self.jobs: j=self.jobs[id] if j['type']!='transfer' or len(j['prereqs'])>0 or j['src'].plate.curloc!='Home' or j['dest'].plate.curloc!='Home': #if j['type']=='transfer': # print "Can't execute job ",id,": ",j,", curlocs=",j['src'].plate.curloc,", ",j['dest'].plate.curloc continue return id for id,j in self.jobs.iteritems(): if j['type']!='multitransfer' or len(j['prereqs'])>0 or j['src'].plate.curloc!='Home' or j['dest'].plate.curloc!='Home': continue # Combine with all other multitransfers from same src alldest=[] allvol=[] for id2,j2 in self.jobs.items(): if j2['type']!='multitransfer' or len(j2['prereqs'])>0 or j['src']!=j2['src']: continue alldest.append(j2['dest']) allvol.append(j2['volume']) self.removeJob(id2) combined=self.addMultiTransfer(volume=allvol,src=j['src'],dest=alldest,prereqs=[]) return combined for id in self.jobs: j=self.jobs[id] if j['type']!='shake' or len(j['prereqs'])>0 or not j['sample'].plate.curloc=='Home' or Experiment.shakerIsActive(): continue return id # Nothing to do return None