[SCM] morituri/master: * morituri/image/cue.py: * morituri/image/toc.py: * morituri/test/test_image_cue.py: * morituri/test/test_image_toc.py: Read input file as utf-8. Fix logging of paths. * morituri/image/image.py: Document and add asserts for unicodeness of paths. Encode path in launch lines as utf-8
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 9a15e890e00f6fee4d41a98365b982718aaf77b4
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Fri Sep 11 15:37:02 2009 +0000
* morituri/image/cue.py:
* morituri/image/toc.py:
* morituri/test/test_image_cue.py:
* morituri/test/test_image_toc.py:
Read input file as utf-8. Fix logging of paths.
* morituri/image/image.py:
Document and add asserts for unicodeness of paths.
Encode path in launch lines as utf-8
diff --git a/ChangeLog b/ChangeLog
index 335653e..9b1202c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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:
+ * morituri/test/test_image_toc.py:
+ Read input file as utf-8. Fix logging of paths.
+ * morituri/image/image.py:
+ Document and add asserts for unicodeness of paths.
+ Encode path in launch lines as utf-8
+
+2009-09-11 Thomas Vander Stichele <thomas at apestaart dot org>
+
* morituri/common/task.py:
Make SyncRunner wrap start() so we correctly handle any
exception being thrown.
diff --git a/morituri/image/cue.py b/morituri/image/cue.py
index fb4078a..a88fafa 100644
--- a/morituri/image/cue.py
+++ b/morituri/image/cue.py
@@ -28,6 +28,7 @@ See http://digitalx.org/cuesheetsyntax.php
import os
import re
+import codecs
from morituri.common import common, log
from morituri.image import table
@@ -65,6 +66,11 @@ class CueFile(object, log.Loggable):
@ivar table: the index table.
"""
def __init__(self, path):
+ """
+ @type path: unicode
+ """
+ assert type(path) is unicode, "%r is not unicode" % path
+
self._path = path
self._rems = {}
self._messages = []
@@ -77,8 +83,8 @@ class CueFile(object, log.Loggable):
currentTrack = None
counter = 0
- self.info('Parsing .cue file %s', self._path)
- handle = open(self._path, 'r')
+ self.info('Parsing .cue file %r', self._path)
+ handle = codecs.open(self._path, 'r', 'utf-8')
for number, line in enumerate(handle.readlines()):
line = line.rstrip()
@@ -134,7 +140,7 @@ class CueFile(object, log.Loggable):
+ seconds * common.FRAMES_PER_SECOND \
+ minutes * common.FRAMES_PER_SECOND * 60
- self.debug('found index %d of track %r in %s:%d',
+ self.debug('found index %d of track %r in %r:%d',
indexNumber, currentTrack, currentFile.path, frameOffset)
# FIXME: what do we do about File's FORMAT ?
currentTrack.index(indexNumber,
@@ -173,7 +179,11 @@ class CueFile(object, log.Loggable):
def getRealPath(self, path):
"""
Translate the .cue's FILE to an existing path.
+
+ @type path: unicode
"""
+ assert type(path) is unicode, "%r is not unicode" % path
+
if os.path.exists(path):
return path
@@ -199,7 +209,7 @@ class CueFile(object, log.Loggable):
if os.path.exists(cpath):
return cpath
- raise KeyError, "Cannot find file for %s" % path
+ raise KeyError, "Cannot find file for %r" % path
class File:
@@ -207,8 +217,13 @@ class File:
I represent a FILE line in a cue file.
"""
def __init__(self, path, format):
+ """
+ @type path: unicode
+ """
+ assert type(path) is unicode, "%r is not unicode" % path
+
self.path = path
self.format = format
def __repr__(self):
- return '<File "%s" of format %s>' % (self.path, self.format)
+ return '<File %r of format %s>' % (self.path, self.format)
diff --git a/morituri/image/image.py b/morituri/image/image.py
index c4fc48b..199d585 100644
--- a/morituri/image/image.py
+++ b/morituri/image/image.py
@@ -37,8 +37,11 @@ class Image(object, log.Loggable):
def __init__(self, path):
"""
+ @type path: unicode
@param path: .cue path
"""
+ assert type(path) is unicode, "%r is not unicode" % path
+
self._path = path
self.cue = cue.CueFile(path)
self.cue.parse()
@@ -50,7 +53,11 @@ class Image(object, log.Loggable):
def getRealPath(self, path):
"""
Translate the .cue's FILE to an existing path.
+
+ @param path: .cue path
"""
+ assert type(path) is unicode, "%r is not unicode" % path
+
return self.cue.getRealPath(path)
def setup(self, runner):
@@ -132,6 +139,11 @@ class AudioLengthTask(task.Task):
length = None
def __init__(self, path):
+ """
+ @type path: unicode
+ """
+ assert type(path) is unicode, "%r is not unicode" % path
+
self._path = path
def start(self, runner):
@@ -139,7 +151,7 @@ class AudioLengthTask(task.Task):
self._pipeline = gst.parse_launch('''
filesrc location="%s" !
decodebin ! audio/x-raw-int !
- fakesink name=sink''' % self._path)
+ fakesink name=sink''' % self._path.encode('utf-8'))
self.debug('pausing')
self._pipeline.set_state(gst.STATE_PAUSED)
self._pipeline.get_state()
@@ -152,12 +164,12 @@ class AudioLengthTask(task.Task):
try:
length, qformat = sink.query_duration(gst.FORMAT_DEFAULT)
except gst.QueryError:
- print 'failed to query %s' % self._path
+ print 'failed to query %r' % self._path
# wavparse 0.10.14 returns in bytes
if qformat == gst.FORMAT_BYTES:
self.debug('query returned in BYTES format')
length /= 4
- self.debug('total length of %s in samples: %d', self._path, length)
+ self.debug('total length of %r in samples: %d', self._path, length)
self.length = length
self._pipeline.set_state(gst.STATE_NULL)
@@ -186,7 +198,8 @@ class ImageVerifyTask(task.MultiSeparateTask):
if length == -1:
path = image.getRealPath(index.path)
- self.debug('schedule scan of audio length of %s', path)
+ assert type(path) is unicode, "%r is not unicode" % path
+ self.debug('schedule scan of audio length of %r', path)
taskk = AudioLengthTask(path)
self.addTask(taskk)
self._tasks.append((trackIndex + 1, track, taskk))
diff --git a/morituri/image/toc.py b/morituri/image/toc.py
index 660249d..c86fdcf 100644
--- a/morituri/image/toc.py
+++ b/morituri/image/toc.py
@@ -26,6 +26,7 @@ Reading .toc files
import os
import re
+import codecs
from morituri.common import common, log
from morituri.image import table
@@ -87,6 +88,10 @@ _INDEX_RE = re.compile(r"""
class TocFile(object, log.Loggable):
def __init__(self, path):
+ """
+ @type path: unicode
+ """
+ assert type(path) is unicode, "%r is not unicode" % path
self._path = path
self._messages = []
self.table = table.Table()
@@ -113,7 +118,7 @@ class TocFile(object, log.Loggable):
# the first track's INDEX 1 can only be gotten from the .toc
# file once the first pregap is calculated; so we add INDEX 1
# at the end of each parsed TRACK record
- handle = open(self._path, 'r')
+ handle = codecs.open(self._path, "r", "utf-8")
for number, line in enumerate(handle.readlines()):
line = line.rstrip()
@@ -313,7 +318,11 @@ class TocFile(object, log.Loggable):
def getRealPath(self, path):
"""
Translate the .cue's FILE to an existing path.
+
+ @type path: unicode
"""
+ assert type(path) is unicode, "%r is not unicode" % path
+
if os.path.exists(path):
return path
@@ -339,16 +348,21 @@ class TocFile(object, log.Loggable):
if os.path.exists(cpath):
return cpath
- raise KeyError, "Cannot find file for %s" % path
+ raise KeyError, "Cannot find file for %r" % path
class File:
"""
I represent a FILE line in a .toc file.
"""
def __init__(self, path, start, length):
+ """
+ @type path: unicode
+ """
+ assert type(path) is unicode, "%r is not unicode" % path
+
self.path = path
#self.start = start
#self.length = length
def __repr__(self):
- return '<File "%s">' % (self.path, )
+ return '<File %r>' % (self.path, )
diff --git a/morituri/test/test_image_cue.py b/morituri/test/test_image_cue.py
index 3fb3096..e8432fa 100644
--- a/morituri/test/test_image_cue.py
+++ b/morituri/test/test_image_cue.py
@@ -12,7 +12,7 @@ from morituri.image import table, cue
class KingsSingleTestCase(unittest.TestCase):
def setUp(self):
self.cue = cue.CueFile(os.path.join(os.path.dirname(__file__),
- 'kings-single.cue'))
+ u'kings-single.cue'))
self.cue.parse()
self.assertEquals(len(self.cue.table.tracks), 11)
@@ -26,7 +26,7 @@ class KingsSingleTestCase(unittest.TestCase):
class KingsSeparateTestCase(unittest.TestCase):
def setUp(self):
self.cue = cue.CueFile(os.path.join(os.path.dirname(__file__),
- 'kings-separate.cue'))
+ u'kings-separate.cue'))
self.cue.parse()
self.assertEquals(len(self.cue.table.tracks), 11)
@@ -40,7 +40,7 @@ class KingsSeparateTestCase(unittest.TestCase):
class KanyeMixedTestCase(unittest.TestCase):
def setUp(self):
self.cue = cue.CueFile(os.path.join(os.path.dirname(__file__),
- 'kanye.cue'))
+ u'kanye.cue'))
self.cue.parse()
self.assertEquals(len(self.cue.table.tracks), 13)
@@ -51,18 +51,19 @@ class KanyeMixedTestCase(unittest.TestCase):
class WriteCueFileTestCase(unittest.TestCase):
def testWrite(self):
- fd, path = tempfile.mkstemp(suffix='morituri.test.cue')
+ fd, path = tempfile.mkstemp(suffix=u'morituri.test.cue')
os.close(fd)
it = table.Table()
t = table.Track(1)
- t.index(1, absolute=0, path='track01.wav', relative=0, counter=1)
+ t.index(1, absolute=0, path=u'track01.wav', relative=0, counter=1)
it.tracks.append(t)
t = table.Track(2)
- t.index(0, absolute=1000, path='track01.wav', relative=1000, counter=1)
- t.index(1, absolute=2000, path='track02.wav', relative=0, counter=2)
+ t.index(0, absolute=1000, path=u'track01.wav',
+ relative=1000, counter=1)
+ t.index(1, absolute=2000, path=u'track02.wav', relative=0, counter=2)
it.tracks.append(t)
it.absolutize()
it.leadout = 3000
diff --git a/morituri/test/test_image_toc.py b/morituri/test/test_image_toc.py
index 31502fd..5efadf5 100644
--- a/morituri/test/test_image_toc.py
+++ b/morituri/test/test_image_toc.py
@@ -12,7 +12,7 @@ from morituri.test import common
class CureTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'cure.toc'))
+ u'cure.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
@@ -93,7 +93,7 @@ class CureTestCase(unittest.TestCase):
class BlocTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'bloc.toc'))
+ u'bloc.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
@@ -140,7 +140,7 @@ class BlocTestCase(unittest.TestCase):
class BreedersTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'breeders.toc'))
+ u'breeders.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
@@ -166,7 +166,7 @@ class BreedersTestCase(unittest.TestCase):
class LadyhawkeTestCase(unittest.TestCase):
def setUp(self):
self.toc = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'ladyhawke.toc'))
+ u'ladyhawke.toc'))
self.toc.parse()
self.assertEquals(len(self.toc.table.tracks), 13)
#import code; code.interact(local=locals())
@@ -182,13 +182,13 @@ class LadyhawkeTestCase(unittest.TestCase):
class CapitalMergeTestCase(unittest.TestCase):
def setUp(self):
self.toc1 = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'capital.1.toc'))
+ u'capital.1.toc'))
self.toc1.parse()
self.assertEquals(len(self.toc1.table.tracks), 11)
self.failUnless(self.toc1.table.tracks[-1].audio)
self.toc2 = toc.TocFile(os.path.join(os.path.dirname(__file__),
- 'capital.2.toc'))
+ u'capital.2.toc'))
self.toc2.parse()
self.assertEquals(len(self.toc2.table.tracks), 1)
self.failIf(self.toc2.table.tracks[-1].audio)
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list