[SCM] morituri/master: * morituri/common/task.py: add task argument to TaskRunner.schedule so we can get exceptions. Add .schedule method to Task to pass self. * morituri/common/checksum.py: * morituri/common/encode.py: * morituri/common/gstreamer.py: * morituri/program/cdparanoia.py: * morituri/program/cdrdao.py: Adapt.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:09:27 UTC 2014


The following commit has been merged in the master branch:
commit 8bc5eff73c06649d984f3190d134728db4f1c4d0
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Tue May 24 12:51:40 2011 +0000

    	* morituri/common/task.py:
    	  add task argument to TaskRunner.schedule so we can get exceptions.
    	  Add .schedule method to Task to pass self.
    	* morituri/common/checksum.py:
    	* morituri/common/encode.py:
    	* morituri/common/gstreamer.py:
    	* morituri/program/cdparanoia.py:
    	* morituri/program/cdrdao.py:
    	  Adapt.

diff --git a/ChangeLog b/ChangeLog
index 5bb9ec6..98ecad6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* morituri/common/task.py:
+	  add task argument to TaskRunner.schedule so we can get exceptions.
+	  Add .schedule method to Task to pass self.
+	* morituri/common/checksum.py:
+	* morituri/common/encode.py:
+	* morituri/common/gstreamer.py:
+	* morituri/program/cdparanoia.py:
+	* morituri/program/cdrdao.py:
+	  Adapt.
+
+2011-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* morituri/test/test_common_encode.py:
 	  Write a non-sine wave so we have an actual flac file that will
 	  typefind.
diff --git a/morituri/common/checksum.py b/morituri/common/checksum.py
index e28e732..5e6e4b1 100644
--- a/morituri/common/checksum.py
+++ b/morituri/common/checksum.py
@@ -133,7 +133,7 @@ class ChecksumTask(gstreamer.GstPipelineTask):
         def play():
             self.pipeline.set_state(gst.STATE_PLAYING)
             return False
-        self.runner.schedule(0, play)
+        self.schedule(0, play)
 
         #self.pipeline.set_state(gst.STATE_PLAYING)
         self.debug('scheduled setting to play')
@@ -193,13 +193,13 @@ class ChecksumTask(gstreamer.GstPipelineTask):
             framesDone = frame - self._frameStart
             progress = float(framesDone) / float((self._frameLength))
             # marshall to the main thread
-            self.runner.schedule(0, self.setProgress, progress)
+            self.schedule(0, self.setProgress, progress)
 
     def _eos_cb(self, sink):
         # get the last one; FIXME: why does this not get to us before ?
         #self._new_buffer_cb(sink)
         self.debug('eos, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
 
 class CRC32Task(ChecksumTask):
     """
@@ -311,7 +311,7 @@ class TRMTask(gstreamer.GstPipelineTask):
     # in the case of checksum
     def bus_eos_cb(self, bus, message):
         gst.debug('eos, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
 
 
     def bus_tag_cb(self, bus, message):
diff --git a/morituri/common/encode.py b/morituri/common/encode.py
index a069f9a..e5edbb3 100644
--- a/morituri/common/encode.py
+++ b/morituri/common/encode.py
@@ -217,7 +217,7 @@ class EncodeTask(gstreamer.GstPipelineTask):
         # update progress based on buffer offset (expected to be in samples)
         # versus length in samples
         # marshal to main thread
-        self.runner.schedule(0, self.setProgress,
+        self.schedule(0, self.setProgress,
             float(buffer.offset) / self._length)
 
         # don't drop the buffer
@@ -225,7 +225,7 @@ class EncodeTask(gstreamer.GstPipelineTask):
 
     def bus_eos_cb(self, bus, message):
         self.debug('eos, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
 
     def _message_element_cb(self, bus, message):
         if message.src != self._level:
@@ -281,7 +281,7 @@ class TagReadTask(gstreamer.GstPipelineTask):
 
     def bus_eos_cb(self, bus, message):
         self.debug('eos, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
 
     def bus_tag_cb(self, bus, message):
         taglist = message.parse_tag()
@@ -344,14 +344,14 @@ class TagWriteTask(task.Task):
         def play():
             self._pipeline.set_state(gst.STATE_PLAYING)
             return False
-        self.runner.schedule(0, play)
+        self.schedule(0, play)
 
         #self._pipeline.set_state(gst.STATE_PLAYING)
         self.debug('scheduled setting to play')
 
     def _message_eos_cb(self, bus, message):
         self.debug('eos, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
 
     def stop(self):
         # here to avoid import gst eating our options
diff --git a/morituri/common/gstreamer.py b/morituri/common/gstreamer.py
index 802c6f4..34d9d64 100644
--- a/morituri/common/gstreamer.py
+++ b/morituri/common/gstreamer.py
@@ -106,7 +106,7 @@ class GstPipelineTask(task.Task):
 
         if self.playing:
             self.debug('scheduling setting pipeline to PLAYING')
-            self.runner.schedule(0, playLater)
+            self.schedule(0, playLater)
 
     def stop(self):
         self.debug('stopping')
@@ -169,4 +169,4 @@ class GstPipelineTask(task.Task):
         exc = GstException(*message.parse_error())
         self.setAndRaiseException(exc)
         self.debug('error, scheduling stop')
-        self.runner.schedule(0, self.stop)
+        self.schedule(0, self.stop)
diff --git a/morituri/common/task.py b/morituri/common/task.py
index ec71be4..8dd68d8 100644
--- a/morituri/common/task.py
+++ b/morituri/common/task.py
@@ -155,6 +155,10 @@ class Task(object, log.Loggable):
         self.debug('set exception, %r, %r' % (
             exception, self.exceptionMessage))
 
+    def schedule(self, delta, callable, *args, **kwargs):
+        self.runner.schedule(self, delta, callable, *args, **kwargs)
+
+
     def addListener(self, listener):
         """
         Add a listener for task status changes.
@@ -210,7 +214,7 @@ class ITaskListener(object):
 class DummyTask(Task):
     def start(self, runner):
         Task.start(self, runner)
-        self.runner.schedule(1.0, self._wind)
+        self.schedule(1.0, self._wind)
 
     def _wind(self):
         self.setProgress(min(self.progress + 0.1, 1.0))
@@ -219,7 +223,7 @@ class DummyTask(Task):
             self.stop()
             return
 
-        self.runner.schedule(1.0, self._wind)
+        self.schedule(1.0, self._wind)
 
 class BaseMultiTask(Task, ITaskListener):
     """
@@ -433,10 +437,16 @@ class SyncRunner(TaskRunner, ITaskListener):
             self.stopped(task)
 
 
-    def schedule(self, delta, callable, *args, **kwargs):
+    def schedule(self, task, delta, callable, *args, **kwargs):
         def c():
-            callable(*args, **kwargs)
-            return False
+            try:
+                callable(*args, **kwargs)
+                return False
+            except Exception, e:
+                self.debug('exception when calling scheduled callable %r',
+                    callable)
+                task.setException(e)
+                raise
         gobject.timeout_add(int(delta * 1000L), c)
 
     ### ITaskListener methods
diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py
index 4c3bd1f..1bf560c 100644
--- a/morituri/program/cdparanoia.py
+++ b/morituri/program/cdparanoia.py
@@ -274,7 +274,7 @@ class ReadTrackTask(task.Task):
 
             raise
 
-        self.runner.schedule(1.0, self._read, runner)
+        self.schedule(1.0, self._read, runner)
 
     def _read(self, runner):
         ret = self._popen.recv_err()
@@ -282,7 +282,7 @@ class ReadTrackTask(task.Task):
             if self._popen.poll() is not None:
                 self._done()
                 return
-            self.runner.schedule(0.01, self._read, runner)
+            self.schedule(0.01, self._read, runner)
             return
 
         self._buffer += ret
@@ -315,11 +315,11 @@ class ReadTrackTask(task.Task):
 
         # 0 does not give us output before we complete, 1.0 gives us output
         # too late
-        self.runner.schedule(0.01, self._read, runner)
+        self.schedule(0.01, self._read, runner)
 
     def _poll(self, runner):
         if self._popen.poll() is None:
-            self.runner.schedule(1.0, self._poll, runner)
+            self.schedule(1.0, self._poll, runner)
             return
 
         self._done()
diff --git a/morituri/program/cdrdao.py b/morituri/program/cdrdao.py
index 671832f..6a8d9c8 100644
--- a/morituri/program/cdrdao.py
+++ b/morituri/program/cdrdao.py
@@ -270,7 +270,7 @@ class CDRDAOTask(task.Task):
             self._popen.pid, self.options)
         self.debug('command: cdrdao %s', ' '.join(self.options))
 
-        self.runner.schedule(1.0, self._read, runner)
+        self.schedule(1.0, self._read, runner)
 
     def _read(self, runner):
         try:
@@ -288,7 +288,7 @@ class CDRDAOTask(task.Task):
 
             if self._popen.poll() is None and self.runner:
                 # not finished yet
-                self.runner.schedule(1.0, self._read, runner)
+                self.schedule(1.0, self._read, runner)
                 return
 
             self._done()

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list