def _load(self, storPath, ext=""): self.log.debug("%s: load from %s, ext '%s'", self, storPath, ext) if self.state != State.init: raise se.TaskMetaDataLoadError("task %s - can't load self: " "not in init state" % self) taskDir = os.path.join(storPath, str(self.id) + str(ext)) if not getProcPool().os.path.exists(taskDir): raise se.TaskDirError("load: no such task dir '%s'" % taskDir) oldid = self.id self._loadTaskMetaFile(taskDir) if self.id != oldid: raise se.TaskMetaDataLoadError("task %s: loaded file do not match" " id (%s != %s)" % (self, self.id, oldid)) if self.state == State.finished: self._loadTaskResultMetaFile(taskDir) for jn in range(self.njobs): self.jobs.append(Job("load", None)) self._loadJobMetaFile(taskDir, jn) self.jobs[jn].setOwnerTask(self) for rn in range(self.nrecoveries): self.recoveries.append(Recovery("load", "load", "load", "load", "")) self._loadRecoveryMetaFile(taskDir, rn) self.recoveries[rn].setOwnerTask(self)
def _loadMetaFile(cls, filename, obj, fields): try: for line in getProcPool().readLines(filename): # process current line line = line.encode('utf8') if line.find(KEY_SEPARATOR) < 0: continue parts = line.split(KEY_SEPARATOR) if len(parts) != 2: cls.log.warning("Task._loadMetaFile: %s - ignoring line" " '%s'", filename, line) continue field = _eq_decode(parts[0].strip()) value = _eq_decode(parts[1].strip()) if field not in fields: cls.log.warning("Task._loadMetaFile: %s - ignoring field" " %s in line '%s'", filename, field, line) continue ftype = fields[field] setattr(obj, field, ftype(value)) except Exception: cls.log.error("Unexpected error", exc_info=True) raise se.TaskMetaDataLoadError(filename)