From 2dab8e5fd6c27c1d70984ec04f95bcb9b8cff028 Mon Sep 17 00:00:00 2001 From: Bruno Cauet Date: Mon, 19 Jan 2015 15:43:17 +0100 Subject: [PATCH] Import unicode_literals in beets package --- beets/__init__.py | 2 +- beets/importer.py | 3 +- beets/library.py | 9 +-- beets/logging.py | 3 +- beets/mediafile.py | 123 ++++++++++++++++++------------------ beets/plugins.py | 3 +- beets/vfs.py | 3 +- test/_common.py | 2 +- test/test_convert.py | 3 +- test/test_importer.py | 3 +- test/test_library.py | 17 ++--- test/test_logging.py | 3 +- test/test_mediafile.py | 14 ++-- test/test_mediafile_edge.py | 3 +- test/test_plugins.py | 3 +- test/test_vfs.py | 3 +- 16 files changed, 106 insertions(+), 91 deletions(-) diff --git a/beets/__init__.py b/beets/__init__.py index 02a2c98dd..8072d793b 100644 --- a/beets/__init__.py +++ b/beets/__init__.py @@ -12,7 +12,7 @@ # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. -from __future__ import division, absolute_import, print_function +from __future__ import absolute_import, unicode_literals __version__ = '1.3.11' __author__ = 'Adrian Sampson ' diff --git a/beets/importer.py b/beets/importer.py index 3d29a418b..ed3e3c22d 100644 --- a/beets/importer.py +++ b/beets/importer.py @@ -12,7 +12,8 @@ # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) """Provides the basic, interface-agnostic workflow for importing and autotagging music files. diff --git a/beets/library.py b/beets/library.py index b5f298abb..19706dd0d 100644 --- a/beets/library.py +++ b/beets/library.py @@ -14,7 +14,8 @@ """The core data store and collection logic for beets. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import os import sys @@ -44,7 +45,7 @@ class PathQuery(dbcore.FieldQuery): """A query that matches all items under a given path.""" escape_re = re.compile(r'[\\_%]') - escape_char = '\\' + escape_char = b'\\' def __init__(self, field, pattern, fast=True): super(PathQuery, self).__init__(field, pattern, fast) @@ -52,7 +53,7 @@ class PathQuery(dbcore.FieldQuery): # Match the path as a single file. self.file_path = util.bytestring_path(util.normpath(pattern)) # As a directory (prefix). - self.dir_path = util.bytestring_path(os.path.join(self.file_path, '')) + self.dir_path = util.bytestring_path(os.path.join(self.file_path, b'')) def match(self, item): return (item.path == self.file_path) or \ @@ -61,7 +62,7 @@ class PathQuery(dbcore.FieldQuery): def clause(self): escape = lambda m: self.escape_char + m.group(0) dir_pattern = self.escape_re.sub(escape, self.dir_path) - dir_pattern = buffer(dir_pattern + '%') + dir_pattern = buffer(dir_pattern + b'%') file_blob = buffer(self.file_path) return '({0} = ?) || ({0} LIKE ? ESCAPE ?)'.format(self.field), \ (file_blob, dir_pattern, self.escape_char) diff --git a/beets/logging.py b/beets/logging.py index 8e55b1b75..eb0c36a4c 100644 --- a/beets/logging.py +++ b/beets/logging.py @@ -20,7 +20,8 @@ that when getLogger(name) instantiates a logger that logger uses {}-style formatting. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) from copy import copy from logging import * # noqa diff --git a/beets/mediafile.py b/beets/mediafile.py index b5d757c84..e2ccb9267 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -32,7 +32,8 @@ Internally ``MediaFile`` uses ``MediaField`` descriptors to access the data from the tags. In turn ``MediaField`` uses a number of ``StorageStyle`` strategies to handle format specific logic. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import mutagen import mutagen.mp3 @@ -178,15 +179,15 @@ def _unpack_asf_image(data): of exceptions (out-of-bounds, etc.). We should clean this up sometime so that the failure modes are well-defined. """ - type, size = struct.unpack_from(" 0 else None image_data = frame.value[text_delimiter_index + 1:] @@ -1009,7 +1010,7 @@ class APEv2ImageStorageStyle(ListStorageStyle): for image in values: image_type = image.type or ImageType.other comment = image.desc or '' - image_data = comment + "\x00" + image.data + image_data = comment.encode('utf8') + b'\x00' + image.data cover_tag = self.TAG_NAMES[image_type] mutagen_file[cover_tag] = image_data @@ -1474,25 +1475,25 @@ class MediaFile(object): title = MediaField( MP3StorageStyle('TIT2'), - MP4StorageStyle("\xa9nam"), + MP4StorageStyle(b"\xa9nam"), StorageStyle('TITLE'), ASFStorageStyle('Title'), ) artist = MediaField( MP3StorageStyle('TPE1'), - MP4StorageStyle("\xa9ART"), + MP4StorageStyle(b"\xa9ART"), StorageStyle('ARTIST'), ASFStorageStyle('Author'), ) album = MediaField( MP3StorageStyle('TALB'), - MP4StorageStyle("\xa9alb"), + MP4StorageStyle(b"\xa9alb"), StorageStyle('ALBUM'), ASFStorageStyle('WM/AlbumTitle'), ) genres = ListMediaField( MP3ListStorageStyle('TCON'), - MP4ListStorageStyle("\xa9gen"), + MP4ListStorageStyle(b"\xa9gen"), ListStorageStyle('GENRE'), ASFStorageStyle('WM/Genre'), ) @@ -1500,19 +1501,19 @@ class MediaFile(object): composer = MediaField( MP3StorageStyle('TCOM'), - MP4StorageStyle("\xa9wrt"), + MP4StorageStyle(b"\xa9wrt"), StorageStyle('COMPOSER'), ASFStorageStyle('WM/Composer'), ) grouping = MediaField( MP3StorageStyle('TIT1'), - MP4StorageStyle("\xa9grp"), + MP4StorageStyle(b"\xa9grp"), StorageStyle('GROUPING'), ASFStorageStyle('WM/ContentGroupDescription'), ) track = MediaField( MP3SlashPackStorageStyle('TRCK', pack_pos=0), - MP4TupleStorageStyle('trkn', index=0), + MP4TupleStorageStyle(b'trkn', index=0), StorageStyle('TRACK'), StorageStyle('TRACKNUMBER'), ASFStorageStyle('WM/TrackNumber'), @@ -1520,7 +1521,7 @@ class MediaFile(object): ) tracktotal = MediaField( MP3SlashPackStorageStyle('TRCK', pack_pos=1), - MP4TupleStorageStyle('trkn', index=1), + MP4TupleStorageStyle(b'trkn', index=1), StorageStyle('TRACKTOTAL'), StorageStyle('TRACKC'), StorageStyle('TOTALTRACKS'), @@ -1529,7 +1530,7 @@ class MediaFile(object): ) disc = MediaField( MP3SlashPackStorageStyle('TPOS', pack_pos=0), - MP4TupleStorageStyle('disk', index=0), + MP4TupleStorageStyle(b'disk', index=0), StorageStyle('DISC'), StorageStyle('DISCNUMBER'), ASFStorageStyle('WM/PartOfSet'), @@ -1537,7 +1538,7 @@ class MediaFile(object): ) disctotal = MediaField( MP3SlashPackStorageStyle('TPOS', pack_pos=1), - MP4TupleStorageStyle('disk', index=1), + MP4TupleStorageStyle(b'disk', index=1), StorageStyle('DISCTOTAL'), StorageStyle('DISCC'), StorageStyle('TOTALDISCS'), @@ -1546,13 +1547,13 @@ class MediaFile(object): ) lyrics = MediaField( MP3DescStorageStyle(key='USLT'), - MP4StorageStyle("\xa9lyr"), + MP4StorageStyle(b"\xa9lyr"), StorageStyle('LYRICS'), ASFStorageStyle('WM/Lyrics'), ) comments = MediaField( MP3DescStorageStyle(key='COMM'), - MP4StorageStyle("\xa9cmt"), + MP4StorageStyle(b"\xa9cmt"), StorageStyle('DESCRIPTION'), StorageStyle('COMMENT'), ASFStorageStyle('WM/Comments'), @@ -1560,111 +1561,111 @@ class MediaFile(object): ) bpm = MediaField( MP3StorageStyle('TBPM'), - MP4StorageStyle('tmpo', as_type=int), + MP4StorageStyle(b'tmpo', as_type=int), StorageStyle('BPM'), ASFStorageStyle('WM/BeatsPerMinute'), out_type=int, ) comp = MediaField( MP3StorageStyle('TCMP'), - MP4BoolStorageStyle('cpil'), + MP4BoolStorageStyle(b'cpil'), StorageStyle('COMPILATION'), ASFStorageStyle('WM/IsCompilation', as_type=bool), out_type=bool, ) albumartist = MediaField( MP3StorageStyle('TPE2'), - MP4StorageStyle('aART'), + MP4StorageStyle(b'aART'), StorageStyle('ALBUM ARTIST'), StorageStyle('ALBUMARTIST'), ASFStorageStyle('WM/AlbumArtist'), ) albumtype = MediaField( MP3DescStorageStyle(u'MusicBrainz Album Type'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Album Type'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Album Type'), StorageStyle('MUSICBRAINZ_ALBUMTYPE'), ASFStorageStyle('MusicBrainz/Album Type'), ) label = MediaField( MP3StorageStyle('TPUB'), - MP4StorageStyle('----:com.apple.iTunes:Label'), - MP4StorageStyle('----:com.apple.iTunes:publisher'), + MP4StorageStyle(b'----:com.apple.iTunes:Label'), + MP4StorageStyle(b'----:com.apple.iTunes:publisher'), StorageStyle('LABEL'), StorageStyle('PUBLISHER'), # Traktor ASFStorageStyle('WM/Publisher'), ) artist_sort = MediaField( MP3StorageStyle('TSOP'), - MP4StorageStyle("soar"), + MP4StorageStyle(b"soar"), StorageStyle('ARTISTSORT'), ASFStorageStyle('WM/ArtistSortOrder'), ) albumartist_sort = MediaField( MP3DescStorageStyle(u'ALBUMARTISTSORT'), - MP4StorageStyle("soaa"), + MP4StorageStyle(b"soaa"), StorageStyle('ALBUMARTISTSORT'), ASFStorageStyle('WM/AlbumArtistSortOrder'), ) asin = MediaField( MP3DescStorageStyle(u'ASIN'), - MP4StorageStyle("----:com.apple.iTunes:ASIN"), + MP4StorageStyle(b"----:com.apple.iTunes:ASIN"), StorageStyle('ASIN'), ASFStorageStyle('MusicBrainz/ASIN'), ) catalognum = MediaField( MP3DescStorageStyle(u'CATALOGNUMBER'), - MP4StorageStyle("----:com.apple.iTunes:CATALOGNUMBER"), + MP4StorageStyle(b"----:com.apple.iTunes:CATALOGNUMBER"), StorageStyle('CATALOGNUMBER'), ASFStorageStyle('WM/CatalogNo'), ) disctitle = MediaField( MP3StorageStyle('TSST'), - MP4StorageStyle("----:com.apple.iTunes:DISCSUBTITLE"), + MP4StorageStyle(b"----:com.apple.iTunes:DISCSUBTITLE"), StorageStyle('DISCSUBTITLE'), ASFStorageStyle('WM/SetSubTitle'), ) encoder = MediaField( MP3StorageStyle('TENC'), - MP4StorageStyle("\xa9too"), + MP4StorageStyle(b"\xa9too"), StorageStyle('ENCODEDBY'), StorageStyle('ENCODER'), ASFStorageStyle('WM/EncodedBy'), ) script = MediaField( MP3DescStorageStyle(u'Script'), - MP4StorageStyle("----:com.apple.iTunes:SCRIPT"), + MP4StorageStyle(b"----:com.apple.iTunes:SCRIPT"), StorageStyle('SCRIPT'), ASFStorageStyle('WM/Script'), ) language = MediaField( MP3StorageStyle('TLAN'), - MP4StorageStyle("----:com.apple.iTunes:LANGUAGE"), + MP4StorageStyle(b"----:com.apple.iTunes:LANGUAGE"), StorageStyle('LANGUAGE'), ASFStorageStyle('WM/Language'), ) country = MediaField( MP3DescStorageStyle('MusicBrainz Album Release Country'), - MP4StorageStyle("----:com.apple.iTunes:MusicBrainz " - "Album Release Country"), + MP4StorageStyle(b"----:com.apple.iTunes:MusicBrainz " + b"Album Release Country"), StorageStyle('RELEASECOUNTRY'), ASFStorageStyle('MusicBrainz/Album Release Country'), ) albumstatus = MediaField( MP3DescStorageStyle(u'MusicBrainz Album Status'), - MP4StorageStyle("----:com.apple.iTunes:MusicBrainz Album Status"), + MP4StorageStyle(b"----:com.apple.iTunes:MusicBrainz Album Status"), StorageStyle('MUSICBRAINZ_ALBUMSTATUS'), ASFStorageStyle('MusicBrainz/Album Status'), ) media = MediaField( MP3StorageStyle('TMED'), - MP4StorageStyle("----:com.apple.iTunes:MEDIA"), + MP4StorageStyle(b"----:com.apple.iTunes:MEDIA"), StorageStyle('MEDIA'), ASFStorageStyle('WM/Media'), ) albumdisambig = MediaField( # This tag mapping was invented for beets (not used by Picard, etc). MP3DescStorageStyle(u'MusicBrainz Album Comment'), - MP4StorageStyle("----:com.apple.iTunes:MusicBrainz Album Comment"), + MP4StorageStyle(b"----:com.apple.iTunes:MusicBrainz Album Comment"), StorageStyle('MUSICBRAINZ_ALBUMCOMMENT'), ASFStorageStyle('MusicBrainz/Album Comment'), ) @@ -1672,7 +1673,7 @@ class MediaFile(object): # Release date. date = DateField( MP3StorageStyle('TDRC'), - MP4StorageStyle("\xa9day"), + MP4StorageStyle(b"\xa9day"), StorageStyle('DATE'), ASFStorageStyle('WM/Year'), year=(StorageStyle('YEAR'),)) @@ -1684,7 +1685,7 @@ class MediaFile(object): # *Original* release date. original_date = DateField( MP3StorageStyle('TDOR'), - MP4StorageStyle('----:com.apple.iTunes:ORIGINAL YEAR'), + MP4StorageStyle(b'----:com.apple.iTunes:ORIGINAL YEAR'), StorageStyle('ORIGINALDATE'), ASFStorageStyle('WM/OriginalReleaseYear')) @@ -1695,13 +1696,13 @@ class MediaFile(object): # Nonstandard metadata. artist_credit = MediaField( MP3DescStorageStyle(u'Artist Credit'), - MP4StorageStyle("----:com.apple.iTunes:Artist Credit"), + MP4StorageStyle(b"----:com.apple.iTunes:Artist Credit"), StorageStyle('ARTIST_CREDIT'), ASFStorageStyle('beets/Artist Credit'), ) albumartist_credit = MediaField( MP3DescStorageStyle(u'Album Artist Credit'), - MP4StorageStyle("----:com.apple.iTunes:Album Artist Credit"), + MP4StorageStyle(b"----:com.apple.iTunes:Album Artist Credit"), StorageStyle('ALBUMARTIST_CREDIT'), ASFStorageStyle('beets/Album Artist Credit'), ) @@ -1715,31 +1716,31 @@ class MediaFile(object): # MusicBrainz IDs. mb_trackid = MediaField( MP3UFIDStorageStyle(owner='http://musicbrainz.org'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Track Id'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Track Id'), StorageStyle('MUSICBRAINZ_TRACKID'), ASFStorageStyle('MusicBrainz/Track Id'), ) mb_albumid = MediaField( MP3DescStorageStyle(u'MusicBrainz Album Id'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Album Id'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Album Id'), StorageStyle('MUSICBRAINZ_ALBUMID'), ASFStorageStyle('MusicBrainz/Album Id'), ) mb_artistid = MediaField( MP3DescStorageStyle(u'MusicBrainz Artist Id'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Artist Id'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Artist Id'), StorageStyle('MUSICBRAINZ_ARTISTID'), ASFStorageStyle('MusicBrainz/Artist Id'), ) mb_albumartistid = MediaField( MP3DescStorageStyle(u'MusicBrainz Album Artist Id'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Album Artist Id'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Album Artist Id'), StorageStyle('MUSICBRAINZ_ALBUMARTISTID'), ASFStorageStyle('MusicBrainz/Album Artist Id'), ) mb_releasegroupid = MediaField( MP3DescStorageStyle(u'MusicBrainz Release Group Id'), - MP4StorageStyle('----:com.apple.iTunes:MusicBrainz Release Group Id'), + MP4StorageStyle(b'----:com.apple.iTunes:MusicBrainz Release Group Id'), StorageStyle('MUSICBRAINZ_RELEASEGROUPID'), ASFStorageStyle('MusicBrainz/Release Group Id'), ) @@ -1747,13 +1748,13 @@ class MediaFile(object): # Acoustid fields. acoustid_fingerprint = MediaField( MP3DescStorageStyle(u'Acoustid Fingerprint'), - MP4StorageStyle('----:com.apple.iTunes:Acoustid Fingerprint'), + MP4StorageStyle(b'----:com.apple.iTunes:Acoustid Fingerprint'), StorageStyle('ACOUSTID_FINGERPRINT'), ASFStorageStyle('Acoustid/Fingerprint'), ) acoustid_id = MediaField( MP3DescStorageStyle(u'Acoustid Id'), - MP4StorageStyle('----:com.apple.iTunes:Acoustid Id'), + MP4StorageStyle(b'----:com.apple.iTunes:Acoustid Id'), StorageStyle('ACOUSTID_ID'), ASFStorageStyle('Acoustid/Id'), ) @@ -1774,11 +1775,11 @@ class MediaFile(object): id3_lang='eng' ), MP4StorageStyle( - '----:com.apple.iTunes:replaygain_track_gain', + b'----:com.apple.iTunes:replaygain_track_gain', float_places=2, suffix=b' dB' ), MP4SoundCheckStorageStyle( - '----:com.apple.iTunes:iTunNORM', + b'----:com.apple.iTunes:iTunNORM', index=0 ), StorageStyle( @@ -1801,7 +1802,7 @@ class MediaFile(object): float_places=2, suffix=u' dB' ), MP4SoundCheckStorageStyle( - '----:com.apple.iTunes:iTunNORM', + b'----:com.apple.iTunes:iTunNORM', index=1 ), StorageStyle( @@ -1829,11 +1830,11 @@ class MediaFile(object): id3_lang='eng' ), MP4StorageStyle( - '----:com.apple.iTunes:replaygain_track_peak', + b'----:com.apple.iTunes:replaygain_track_peak', float_places=6 ), MP4SoundCheckStorageStyle( - '----:com.apple.iTunes:iTunNORM', + b'----:com.apple.iTunes:iTunNORM', index=1 ), StorageStyle(u'REPLAYGAIN_TRACK_PEAK', float_places=6), @@ -1850,7 +1851,7 @@ class MediaFile(object): float_places=6 ), MP4StorageStyle( - '----:com.apple.iTunes:replaygain_album_peak', + b'----:com.apple.iTunes:replaygain_album_peak', float_places=6 ), StorageStyle(u'REPLAYGAIN_ALBUM_PEAK', float_places=6), @@ -1860,7 +1861,7 @@ class MediaFile(object): initial_key = MediaField( MP3StorageStyle('TKEY'), - MP4StorageStyle('----:com.apple.iTunes:initialkey'), + MP4StorageStyle(b'----:com.apple.iTunes:initialkey'), StorageStyle('INITIALKEY'), ASFStorageStyle('INITIALKEY'), ) diff --git a/beets/plugins.py b/beets/plugins.py index 57ab86069..d67aadf54 100755 --- a/beets/plugins.py +++ b/beets/plugins.py @@ -14,7 +14,8 @@ """Support for beets plugins.""" -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import traceback import inspect diff --git a/beets/vfs.py b/beets/vfs.py index de1db037d..e3cebafb1 100644 --- a/beets/vfs.py +++ b/beets/vfs.py @@ -15,7 +15,8 @@ """A simple utility for constructing filesystem-like trees from beets libraries. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) from collections import namedtuple from beets import util diff --git a/test/_common.py b/test/_common.py index 40fa34f4e..076ab939b 100644 --- a/test/_common.py +++ b/test/_common.py @@ -42,7 +42,7 @@ beetsplug.__path__ = [os.path.abspath( )] # Test resources path. -RSRC = os.path.join(os.path.dirname(__file__), 'rsrc') +RSRC = os.path.join(os.path.dirname(__file__), b'rsrc') # Propagate to root loger so nosetest can capture it log = logging.getLogger('beets') diff --git a/test/test_convert.py b/test/test_convert.py index f59b32c8d..8f099924c 100644 --- a/test/test_convert.py +++ b/test/test_convert.py @@ -12,7 +12,8 @@ # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import re import os.path diff --git a/test/test_importer.py b/test/test_importer.py index 6a597a2cd..bd78cc3e9 100644 --- a/test/test_importer.py +++ b/test/test_importer.py @@ -13,7 +13,8 @@ # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) """Tests for the general importer functionality. """ diff --git a/test/test_library.py b/test/test_library.py index 80edada11..fd4931775 100644 --- a/test/test_library.py +++ b/test/test_library.py @@ -14,7 +14,8 @@ """Tests for non-query database functions of Item. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import os import os.path @@ -58,7 +59,7 @@ class StoreTest(_common.LibTestCase): self.i.store() new_year = self.lib._connection().execute( 'select year from items where ' - 'title="the title"').fetchone()['year'] + 'title="the title"').fetchone()[b'year'] self.assertEqual(new_year, 1987) def test_store_only_writes_dirty_fields(self): @@ -67,7 +68,7 @@ class StoreTest(_common.LibTestCase): self.i.store() new_genre = self.lib._connection().execute( 'select genre from items where ' - 'title="the title"').fetchone()['genre'] + 'title="the title"').fetchone()[b'genre'] self.assertEqual(new_genre, original_genre) def test_store_clears_dirty_flags(self): @@ -86,7 +87,7 @@ class AddTest(_common.TestCase): self.lib.add(self.i) new_grouping = self.lib._connection().execute( 'select grouping from items ' - 'where composer="the composer"').fetchone()['grouping'] + 'where composer="the composer"').fetchone()[b'grouping'] self.assertEqual(new_grouping, self.i.grouping) def test_library_add_path_inserts_row(self): @@ -96,7 +97,7 @@ class AddTest(_common.TestCase): self.lib.add(i) new_grouping = self.lib._connection().execute( 'select grouping from items ' - 'where composer="the composer"').fetchone()['grouping'] + 'where composer="the composer"').fetchone()[b'grouping'] self.assertEqual(new_grouping, self.i.grouping) @@ -441,7 +442,7 @@ class DestinationTest(_common.TestCase): self.i.title = u'h\u0259d' self.lib.path_formats = [('default', '$title')] p = self.i.destination() - self.assertFalse('?' in p) + self.assertFalse(b'?' in p) # We use UTF-8 to encode Windows paths now. self.assertTrue(u'h\u0259d'.encode('utf8') in p) finally: @@ -941,7 +942,7 @@ class PathStringTest(_common.TestCase): self.assert_(isinstance(i.path, str)) def test_special_chars_preserved_in_database(self): - path = 'b\xe1r' + path = 'b\xe1r'.encode('utf8') self.i.path = path self.i.store() i = list(self.lib.items())[0] @@ -949,7 +950,7 @@ class PathStringTest(_common.TestCase): def test_special_char_path_added_to_database(self): self.i.remove() - path = 'b\xe1r' + path = 'b\xe1r'.encode('utf8') i = item() i.path = path self.lib.add(i) diff --git a/test/test_logging.py b/test/test_logging.py index ccdd86f08..a67269b90 100644 --- a/test/test_logging.py +++ b/test/test_logging.py @@ -1,5 +1,6 @@ """Stupid tests that ensure logging works as expected""" -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import logging as log from StringIO import StringIO diff --git a/test/test_mediafile.py b/test/test_mediafile.py index 9b515cd67..9f8f6ef31 100644 --- a/test/test_mediafile.py +++ b/test/test_mediafile.py @@ -15,7 +15,8 @@ """Automatically-generated blanket testing for the MediaFile metadata layer. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import os import shutil @@ -285,10 +286,10 @@ class GenreListTestMixin(object): field_extension = MediaField( - MP3DescStorageStyle('customtag'), - MP4StorageStyle('----:com.apple.iTunes:customtag'), - StorageStyle('customtag'), - ASFStorageStyle('customtag'), + MP3DescStorageStyle(b'customtag'), + MP4StorageStyle(b'----:com.apple.iTunes:customtag'), + StorageStyle(b'customtag'), + ASFStorageStyle(b'customtag'), ) @@ -681,7 +682,7 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin, # ReplayGain is float tags[key] = 1.0 else: - tags[key] = 'value\u2010%s' % key + tags[key] = b'value\u2010%s' % key for key in ['disc', 'disctotal', 'track', 'tracktotal', 'bpm']: tags[key] = 1 @@ -700,6 +701,7 @@ class ReadWriteTestBase(ArtTestMixin, GenreListTestMixin, tags['original_year'] = original_date.year tags['original_month'] = original_date.month tags['original_day'] = original_date.day + return tags diff --git a/test/test_mediafile_edge.py b/test/test_mediafile_edge.py index 5680b3fc0..965b9090c 100644 --- a/test/test_mediafile_edge.py +++ b/test/test_mediafile_edge.py @@ -14,7 +14,8 @@ """Specific, edge-case tests for the MediaFile metadata layer. """ -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) import os import shutil diff --git a/test/test_plugins.py b/test/test_plugins.py index 644b23638..eeac6afa4 100644 --- a/test/test_plugins.py +++ b/test/test_plugins.py @@ -12,7 +12,8 @@ # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) from mock import patch from test._common import unittest diff --git a/test/test_vfs.py b/test/test_vfs.py index 9f67d2e13..9d56e8eeb 100644 --- a/test/test_vfs.py +++ b/test/test_vfs.py @@ -13,7 +13,8 @@ # included in all copies or substantial portions of the Software. """Tests for the virtual filesystem builder..""" -from __future__ import division, absolute_import, print_function +from __future__ import (division, absolute_import, print_function, + unicode_literals) from test import _common from test._common import unittest