X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FTask.py;h=867692330ca39f41a4f9660198df93b77e223cf2;hb=8932edecb7854241f2213d1ba77c629eff5aab85;hp=04e5c9385948e0e4426619787ada2fa3199b8bb4;hpb=6df771b5f7e744c650b73f8548ab41152c0185eb;p=vuplus_dvbapp diff --git a/lib/python/Components/Task.py b/lib/python/Components/Task.py index 04e5c93..8676923 100644 --- a/lib/python/Components/Task.py +++ b/lib/python/Components/Task.py @@ -16,6 +16,7 @@ class Job(object): self.end = 100 self.__progress = 0 self.weightScale = 1 + self.afterEvent = None self.state_changed = CList() @@ -63,11 +64,10 @@ class Job(object): def runNext(self): if self.current_task == len(self.tasks): if len(self.resident_tasks) == 0: - cb = self.callback - self.callback = None self.status = self.FINISHED self.state_changed() - cb(self, None, []) + self.callback(self, None, []) + self.callback = None else: print "still waiting for %d resident task(s) %s to finish" % (len(self.resident_tasks), str(self.resident_tasks)) else: @@ -108,7 +108,6 @@ class Job(object): self.tasks[i].abort() def cancel(self): - # some Jobs might have a better idea of how to cancel a job self.abort() class Task(object): @@ -131,6 +130,7 @@ class Task(object): self.task_progress_changed = None self.output_line = "" job.addTask(self) + self.container = None def setCommandline(self, cmd, args): self.cmd = cmd @@ -211,7 +211,8 @@ class Task(object): self.finish() def abort(self): - self.container.kill() + if self.container: + self.container.kill() self.finish(aborted = True) def finish(self, aborted = False): @@ -303,6 +304,7 @@ class JobManager: list.append(self.active_job) list += self.active_jobs return list + # some examples: #class PartitionExistsPostcondition: # def __init__(self, device): @@ -368,12 +370,20 @@ class DiskspacePrecondition(Condition): class ToolExistsPrecondition(Condition): def check(self, task): import os + if task.cmd[0]=='/': - realpath = task.cmd + self.realpath = task.cmd + print "[Task.py][ToolExistsPrecondition] WARNING: usage of absolute paths for tasks should be avoided!" + return os.access(self.realpath, os.X_OK) else: - realpath = task.cwd + '/' + task.cmd - self.realpath = realpath - return os.access(realpath, os.X_OK) + self.realpath = task.cmd + path = os.environ.get('PATH', '').split(os.pathsep) + path.append(task.cwd + '/') + absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path)) + if len(absolutes) > 0: + self.realpath = task.cmd[0] + return True + return False def getErrorMessage(self, task): return _("A required tool (%s) was not found.") % (self.realpath)