def list(self):
"""Get a directory listing"""
- dirs_to_copy = []
args = copy.copy(self.cmd)
args.append(self.source_base)
logging.debug("Rsync cmd:" + " ".join(args))
short_process = subprocess.Popen(args, stdout=subprocess.PIPE)
- direntries = [ x.split() for x in short_process.stdout ]
+ return self.list_filter(short_process.stdout)
+
+ def list_filter(self, lines):
+ """
+ parse rsync directory listing
+ """
+ dirs_to_copy = []
+ direntries = [ x[0:42].split() + [x[43:-1]] for x in lines ]
for permissions, size, filedate, filetime, filename in direntries:
if permissions[0] == 'd':
# hey its a directory, the first step to being something we want to
self.notify_runner = None
self.register_function(self.startCopy)
- self.register_function(self.runFinished)
+ self.register_function(self.sequencingFinished)
self.eventTasks.append(self.update)
def read_config(self, section=None, configfile=None):
logging.info("copying:" + " ".join(started)+".")
return started
- def runFinished(self, runDir, *args):
+ def sequencingFinished(self, runDir, *args):
"""
The run was finished, if we're done copying, pass the message on
"""
# see if we're still copying
if runfolder_validate(runDir):
- if runDir in self.rsync.keys():
- # still copying
- self.pending.append(runDir)
- logging.info("%s finished, but still copying" % (runDir))
- return "PENDING"
- else:
- # we're done
- self.reportRunFinished(runDir)
- logging.info("%s finished" % (runDir))
- return "DONE"
+ logging.info("recevied sequencing finshed for %s" % (runDir))
+ self.pending.append(runDir)
+ self.startCopy()
+ return "PENDING"
else:
errmsg = "received bad runfolder name (%s)" % (runDir)
logging.warning(errmsg)
# maybe I should use a different error message
raise RuntimeError(errmsg)
- def reportRunFinished(self, runDir):
+ def reportSequencingFinished(self, runDir):
"""
- Send the runFinished message to the interested parties
+ Send the sequencingFinished message to the interested parties
"""
if self.notify_users is not None:
for u in self.notify_users:
- self.send(u, 'run %s finished' % (runDir))
+ self.send(u, 'Sequencing run %s finished' % (runDir))
if self.notify_runner is not None:
for r in self.notify_runner:
- rpc.send(self.cl, self.runner, (runDir,), 'runFinished')
- logging.info("forwarding runFinshed message for %s" % (runDir))
+ self.rpc_send(r, (runDir,), 'sequencingFinished')
+ logging.info("forwarding sequencingFinshed message for %s" % (runDir))
def update(self, *args):
"""
self.rsync.poll()
for p in self.pending:
if p not in self.rsync.keys():
- self.reportRunFinished(p)
+ self.reportSequencingFinished(p)
self.pending.remove(p)
def _parser(self, msg, who):
msg.append(u" " + d)
reply = os.linesep.join(msg)
else:
- reply = u"I didn't understand '%s'"+os.linesep+help % (unicode(msg))
+ reply = u"I didn't understand '%s'" % (unicode(msg))
return reply
def main(args=None):