[SCM] morituri/master: * HACKING: Note unicode handling. * morituri/test/test_image_image.py: * morituri/image/table.py: * morituri/program/cdparanoia.py: * morituri/common/checksum.py: Use unicode for paths. Use repr for path representation. * morituri/test/test_common_checksum.py: Add test for unicode audio file name.

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


The following commit has been merged in the master branch:
commit e6f13ccf84db59d6e7f0ca9f95fe0f784ae31671
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Fri Sep 11 15:40:44 2009 +0000

    	* HACKING:
    	  Note unicode handling.
    	* morituri/test/test_image_image.py:
    	* morituri/image/table.py:
    	* morituri/program/cdparanoia.py:
    	* morituri/common/checksum.py:
    	  Use unicode for paths.
    	  Use repr for path representation.
    	* morituri/test/test_common_checksum.py:
    	  Add test for unicode audio file name.

diff --git a/ChangeLog b/ChangeLog
index 9b1202c..85dc4f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* HACKING:
+	  Note unicode handling.
+	* morituri/test/test_image_image.py:
+	* morituri/image/table.py:
+	* morituri/program/cdparanoia.py:
+	* morituri/common/checksum.py:
+	  Use unicode for paths.
+	  Use repr for path representation.
+	* morituri/test/test_common_checksum.py:
+	  Add test for unicode audio file name.
+
+2009-09-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* morituri/image/cue.py:
 	* morituri/image/toc.py:
 	* morituri/test/test_image_cue.py:
diff --git a/HACKING b/HACKING
index e656a1e..d71e7d1 100644
--- a/HACKING
+++ b/HACKING
@@ -17,3 +17,14 @@ track  2: frame start  17811, 18481 CD frames
 track 11: frame start 166858, 25103 CD frames (14760564 audio frames)
 
 191961 total CD frames
+
+unicode
+-------
+- All text files should be read and written as unicode.
+- All strings that came from the outside should be converted to unicode objects.
+- Use asserts liberally to ensure this so we catch problems earlier.
+- All gst.parse_launch() pipelines should be passed as utf-8; use
+  encode('utf-8')
+- morituri.extern.log.log is not unicode-safe; don't pass it unicode objects;
+  for example, always use %r to log paths
+- run with RIP_DEBUG=5 once in a while to catch unicode/logging errors.
diff --git a/morituri/common/checksum.py b/morituri/common/checksum.py
index 4938af3..59eeafe 100644
--- a/morituri/common/checksum.py
+++ b/morituri/common/checksum.py
@@ -46,13 +46,17 @@ class ChecksumTask(task.Task):
         ie 16 bit stereo is 4 bytes per frame.
         If frameLength < 0 it is treated as 'unknown' and calculated.
 
+        @type  path:       unicode
         @type  frameStart: int
         @param frameStart: the frame to start at
         """
-        self.debug('Creating checksum task on %s from %d to %d',
+        assert type(path) is unicode, "%r is not unicode" % path
+
+        # use repr/%r because path can be unicode
+        self.debug('Creating checksum task on %r from %d to %d',
             path, frameStart, frameLength)
         if not os.path.exists(path):
-            raise IndexError, '%s does not exist' % path
+            raise IndexError, '%r does not exist' % path
 
         self._path = path
         self._frameStart = frameStart
@@ -71,7 +75,8 @@ class ChecksumTask(task.Task):
         self._pipeline = gst.parse_launch('''
             filesrc location="%s" !
             decodebin ! audio/x-raw-int !
-            appsink name=sink sync=False emit-signals=True''' % self._path)
+            appsink name=sink sync=False emit-signals=True''' %
+                self._path.encode('utf-8'))
 
         self.debug('pausing pipeline')
         self._pipeline.set_state(gst.STATE_PAUSED)
@@ -108,8 +113,9 @@ class ChecksumTask(task.Task):
             gst.SEEK_FLAG_FLUSH,
             gst.SEEK_TYPE_SET, self._frameStart,
             gst.SEEK_TYPE_SET, self._frameEnd + 1) # half-inclusive interval
-        gst.debug('CRCing %s from sector %d to sector %d' % (
-            self._path, self._frameStart / common.SAMPLES_PER_FRAME,
+        gst.debug('CRCing %r from sector %d to sector %d' % (
+            self._path,
+            self._frameStart / common.SAMPLES_PER_FRAME,
             (self._frameEnd + 1) / common.SAMPLES_PER_FRAME))
         # FIXME: sending it with frameEnd set screws up the seek, we don't get
         # everything for flac; fixed in recent -good
@@ -182,7 +188,7 @@ class ChecksumTask(task.Task):
         if not self._last:
             # see http://bugzilla.gnome.org/show_bug.cgi?id=578612
             print 'ERROR: not a single buffer gotten'
-            #raise
+            # FIXME: instead of print, do something useful
         else:
             self._checksum = self._checksum % 2 ** 32
             self.debug("last offset %r", self._last.offset)
@@ -226,7 +232,7 @@ class AccurateRipChecksumTask(ChecksumTask):
         self._discFrameCounter = 0 # 1-based
 
     def __repr__(self):
-        return "<AccurateRipCheckSumTask of track %d in %s>" % (
+        return "<AccurateRipCheckSumTask of track %d in %r>" % (
             self._trackNumber, self._path)
 
     def do_checksum_buffer(self, buf, checksum):
diff --git a/morituri/image/table.py b/morituri/image/table.py
index 217c5b3..655fb75 100644
--- a/morituri/image/table.py
+++ b/morituri/image/table.py
@@ -79,6 +79,12 @@ class Track:
         self.cdtext = {}
 
     def index(self, number, absolute=None, path=None, relative=None, counter=None):
+        """
+        @type path:  unicode or None
+        """
+        if path is not None:
+            assert type(path) is unicode, "%r is not unicode" % path
+
         i = Index(number, absolute, path, relative, counter)
         self.indexes[number] = i
 
@@ -111,6 +117,7 @@ class Index:
     """
     @ivar counter: counter for the index source; distinguishes between
                    the matching FILE lines in .cue files for example
+    @type path:    unicode or None
     """
     number = None
     absolute = None
@@ -119,6 +126,10 @@ class Index:
     counter = None
 
     def __init__(self, number, absolute=None, path=None, relative=None, counter=None):
+
+        if path is not None:
+            assert type(path) is unicode, "%r is not unicode" % path
+
         self.number = number
         self.absolute = absolute
         self.path = path
@@ -528,7 +539,7 @@ class Table(object, log.Loggable):
 
         Assumes all indexes have an absolute offset and will raise if not.
         """
-        self.debug('setFile: track %d, index %d, path %s, '
+        self.debug('setFile: track %d, index %d, path %r, '
             'length %r, counter %r', track, index, path, length, counter)
 
         t = self.tracks[track - 1]
@@ -542,7 +553,7 @@ class Table(object, log.Loggable):
             i.path = path
             i.relative = i.absolute - start
             i.counter = counter
-            self.debug('Setting path %s, relative %r on '
+            self.debug('Setting path %r, relative %r on '
                 'track %d, index %d, counter %r',
                 path, i.relative, track, index, counter)
             try:
diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py
index 2bc0d89..c064b3b 100644
--- a/morituri/program/cdparanoia.py
+++ b/morituri/program/cdparanoia.py
@@ -362,6 +362,7 @@ class ReadVerifyTrackTask(task.MultiSeparateTask):
             self.debug('read and verify with taglist %r', taglist)
         # FIXME: choose a dir on the same disk/dir as the final path
         fd, tmppath = tempfile.mkstemp(suffix='.morituri.wav')
+        tmppath = unicode(tmppath)
         os.close(fd)
         self._tmpwavpath = tmppath
 
@@ -376,6 +377,7 @@ class ReadVerifyTrackTask(task.MultiSeparateTask):
 
         fd, tmpoutpath = tempfile.mkstemp(suffix='.morituri.%s' %
             profile.extension)
+        tmpoutpath = unicode(tmpoutpath)
         os.close(fd)
         self._tmppath = tmpoutpath
         self.tasks.append(encode.EncodeTask(tmppath, tmpoutpath, profile,
diff --git a/morituri/test/test_common_checksum.py b/morituri/test/test_common_checksum.py
index dd720a8..e458f9a 100644
--- a/morituri/test/test_common_checksum.py
+++ b/morituri/test/test_common_checksum.py
@@ -12,6 +12,8 @@ import gst
 
 from morituri.common import task, checksum
 
+from morituri.test import common
+
 def h(i):
     return "0x%08x" % i
 
@@ -19,9 +21,19 @@ class EmptyTestCase(unittest.TestCase):
     def testEmpty(self):
         # this test makes sure that checksumming empty files doesn't hang
         self.runner = task.SyncRunner(verbose=False)
-        fd, path = tempfile.mkstemp(suffix='morituri.test.empty')
+        fd, path = tempfile.mkstemp(suffix=u'morituri.test.empty')
         checksumtask = checksum.ChecksumTask(path) 
         # FIXME: do we want a specific error for this ?
         self.assertRaises(gst.QueryError, self.runner.run,
             checksumtask, verbose=False)
         os.unlink(path)
+
+    def testUnicodePath(self):
+        # this test makes sure we can checksum a unicode path
+        self.runner = task.SyncRunner(verbose=False)
+        fd, path = tempfile.mkstemp(
+            suffix=u'morituri.test.B\xeate Noire.empty')
+        checksumtask = checksum.ChecksumTask(path) 
+        self.assertRaises(gst.QueryError, self.runner.run,
+            checksumtask, verbose=False)
+        os.unlink(path)
diff --git a/morituri/test/test_image_image.py b/morituri/test/test_image_image.py
index 7dd7340..a35bf4f 100644
--- a/morituri/test/test_image_image.py
+++ b/morituri/test/test_image_image.py
@@ -16,7 +16,7 @@ def h(i):
 class TrackSingleTestCase(unittest.TestCase):
     def setUp(self):
         self.image = image.Image(os.path.join(os.path.dirname(__file__),
-            'track-single.cue'))
+            u'track-single.cue'))
         self.runner = task.SyncRunner(verbose=False)
         self.image.setup(self.runner)
 
@@ -46,7 +46,7 @@ class TrackSingleTestCase(unittest.TestCase):
 class TrackSeparateTestCase(unittest.TestCase):
     def setUp(self):
         self.image = image.Image(os.path.join(os.path.dirname(__file__),
-            'track-separate.cue'))
+            u'track-separate.cue'))
         self.runner = task.SyncRunner(verbose=False)
         self.image.setup(self.runner)
 
@@ -75,7 +75,7 @@ class TrackSeparateTestCase(unittest.TestCase):
 
 class AudioLengthTestCase(unittest.TestCase):
     def testLength(self):
-        path = os.path.join(os.path.dirname(__file__), 'track.flac')
+        path = os.path.join(os.path.dirname(__file__), u'track.flac')
         t = image.AudioLengthTask(path)
         runner = task.SyncRunner()
         runner.run(t, verbose=False)

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list