Always use syspath to construct MediaFile

Related to #1966. Previously, we used a `syspath` call inside MediaFile, which
probably wasn't right: the constructor should behave like `open` in that we
need to use pass an OS path.
This commit is contained in:
Adrian Sampson 2016-12-04 20:59:04 -05:00
parent 991c9936fd
commit ae5e55cad6
4 changed files with 33 additions and 29 deletions

View file

@ -1104,18 +1104,20 @@ class WriteTest(unittest.TestCase, TestHelper):
shutil.copy(syspath(item.path), syspath(custom_path)) shutil.copy(syspath(item.path), syspath(custom_path))
item['artist'] = 'new artist' item['artist'] = 'new artist'
self.assertNotEqual(MediaFile(custom_path).artist, 'new artist') self.assertNotEqual(MediaFile(syspath(custom_path)).artist,
self.assertNotEqual(MediaFile(item.path).artist, 'new artist') 'new artist')
self.assertNotEqual(MediaFile(syspath(item.path)).artist,
'new artist')
item.write(custom_path) item.write(custom_path)
self.assertEqual(MediaFile(custom_path).artist, 'new artist') self.assertEqual(MediaFile(syspath(custom_path)).artist, 'new artist')
self.assertNotEqual(MediaFile(item.path).artist, 'new artist') self.assertNotEqual(MediaFile(syspath(item.path)).artist, 'new artist')
def test_write_custom_tags(self): def test_write_custom_tags(self):
item = self.add_item_fixture(artist='old artist') item = self.add_item_fixture(artist='old artist')
item.write(tags={'artist': 'new artist'}) item.write(tags={'artist': 'new artist'})
self.assertNotEqual(item.artist, 'new artist') self.assertNotEqual(item.artist, 'new artist')
self.assertEqual(MediaFile(item.path).artist, 'new artist') self.assertEqual(MediaFile(syspath(item.path)).artist, 'new artist')
def test_write_date_field(self): def test_write_date_field(self):
# Since `date` is not a MediaField, this should do nothing. # Since `date` is not a MediaField, this should do nothing.
@ -1123,7 +1125,7 @@ class WriteTest(unittest.TestCase, TestHelper):
clean_year = item.year clean_year = item.year
item.date = u'foo' item.date = u'foo'
item.write() item.write()
self.assertEqual(MediaFile(item.path).year, clean_year) self.assertEqual(MediaFile(syspath(item.path)).year, clean_year)
class ItemReadTest(unittest.TestCase): class ItemReadTest(unittest.TestCase):

View file

@ -27,7 +27,7 @@ from beets import plugins, config, ui
from beets.library import Item from beets.library import Item
from beets.dbcore import types from beets.dbcore import types
from beets.mediafile import MediaFile from beets.mediafile import MediaFile
from beets.util import displayable_path, bytestring_path from beets.util import displayable_path, bytestring_path, syspath
from test.test_importer import ImportHelper, AutotagStub from test.test_importer import ImportHelper, AutotagStub
from test.test_ui_importer import TerminalImportSessionSetup from test.test_ui_importer import TerminalImportSessionSetup
@ -118,7 +118,7 @@ class ItemWriteTest(unittest.TestCase, TestHelper):
item = self.add_item_fixture(artist=u'XXX') item = self.add_item_fixture(artist=u'XXX')
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(mediafile.artist, u'YYY') self.assertEqual(mediafile.artist, u'YYY')
def register_listener(self, event, func): def register_listener(self, event, func):

View file

@ -40,6 +40,7 @@ from beets import config
from beets import plugins from beets import plugins
from beets.util.confit import ConfigError from beets.util.confit import ConfigError
from beets import util from beets import util
from beets.util import syspath
class ListTest(unittest.TestCase): class ListTest(unittest.TestCase):
@ -289,7 +290,7 @@ class ModifyTest(unittest.TestCase, TestHelper):
def test_write_initial_key_tag(self): def test_write_initial_key_tag(self):
self.modify(u"initial_key=C#m") self.modify(u"initial_key=C#m")
item = self.lib.items().get() item = self.lib.items().get()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(mediafile.initial_key, u'C#m') self.assertEqual(mediafile.initial_key, u'C#m')
def test_set_flexattr(self): def test_set_flexattr(self):
@ -313,11 +314,11 @@ class ModifyTest(unittest.TestCase, TestHelper):
item.write() item.write()
item.store() item.store()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(mediafile.initial_key, u'C#m') self.assertEqual(mediafile.initial_key, u'C#m')
self.modify(u"initial_key!") self.modify(u"initial_key!")
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertIsNone(mediafile.initial_key) self.assertIsNone(mediafile.initial_key)
def test_arg_parsing_colon_query(self): def test_arg_parsing_colon_query(self):
@ -528,7 +529,7 @@ class UpdateTest(_common.TestCase):
self.assertNotExists(artpath) self.assertNotExists(artpath)
def test_modified_metadata_detected(self): def test_modified_metadata_detected(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.save() mf.save()
self._update() self._update()
@ -536,7 +537,7 @@ class UpdateTest(_common.TestCase):
self.assertEqual(item.title, u'differentTitle') self.assertEqual(item.title, u'differentTitle')
def test_modified_metadata_moved(self): def test_modified_metadata_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.save() mf.save()
self._update(move=True) self._update(move=True)
@ -544,7 +545,7 @@ class UpdateTest(_common.TestCase):
self.assertTrue(b'differentTitle' in item.path) self.assertTrue(b'differentTitle' in item.path)
def test_modified_metadata_not_moved(self): def test_modified_metadata_not_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.save() mf.save()
self._update(move=False) self._update(move=False)
@ -552,7 +553,7 @@ class UpdateTest(_common.TestCase):
self.assertTrue(b'differentTitle' not in item.path) self.assertTrue(b'differentTitle' not in item.path)
def test_selective_modified_metadata_moved(self): def test_selective_modified_metadata_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.genre = u'differentGenre' mf.genre = u'differentGenre'
mf.save() mf.save()
@ -562,7 +563,7 @@ class UpdateTest(_common.TestCase):
self.assertNotEqual(item.genre, u'differentGenre') self.assertNotEqual(item.genre, u'differentGenre')
def test_selective_modified_metadata_not_moved(self): def test_selective_modified_metadata_not_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.genre = u'differentGenre' mf.genre = u'differentGenre'
mf.save() mf.save()
@ -572,7 +573,7 @@ class UpdateTest(_common.TestCase):
self.assertNotEqual(item.genre, u'differentGenre') self.assertNotEqual(item.genre, u'differentGenre')
def test_modified_album_metadata_moved(self): def test_modified_album_metadata_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.album = u'differentAlbum' mf.album = u'differentAlbum'
mf.save() mf.save()
self._update(move=True) self._update(move=True)
@ -581,7 +582,7 @@ class UpdateTest(_common.TestCase):
def test_modified_album_metadata_art_moved(self): def test_modified_album_metadata_art_moved(self):
artpath = self.album.artpath artpath = self.album.artpath
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.album = u'differentAlbum' mf.album = u'differentAlbum'
mf.save() mf.save()
self._update(move=True) self._update(move=True)
@ -589,7 +590,7 @@ class UpdateTest(_common.TestCase):
self.assertNotEqual(artpath, album.artpath) self.assertNotEqual(artpath, album.artpath)
def test_selective_modified_album_metadata_moved(self): def test_selective_modified_album_metadata_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.album = u'differentAlbum' mf.album = u'differentAlbum'
mf.genre = u'differentGenre' mf.genre = u'differentGenre'
mf.save() mf.save()
@ -599,7 +600,7 @@ class UpdateTest(_common.TestCase):
self.assertNotEqual(item.genre, u'differentGenre') self.assertNotEqual(item.genre, u'differentGenre')
def test_selective_modified_album_metadata_not_moved(self): def test_selective_modified_album_metadata_not_moved(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.album = u'differentAlbum' mf.album = u'differentAlbum'
mf.genre = u'differentGenre' mf.genre = u'differentGenre'
mf.save() mf.save()
@ -609,7 +610,7 @@ class UpdateTest(_common.TestCase):
self.assertEqual(item.genre, u'differentGenre') self.assertEqual(item.genre, u'differentGenre')
def test_mtime_match_skips_update(self): def test_mtime_match_skips_update(self):
mf = MediaFile(self.i.path) mf = MediaFile(syspath(self.i.path))
mf.title = u'differentTitle' mf.title = u'differentTitle'
mf.save() mf.save()

View file

@ -11,6 +11,7 @@ from beets.library import Item
from beets import config from beets import config
from beetsplug.zero import ZeroPlugin from beetsplug.zero import ZeroPlugin
from beets.mediafile import MediaFile from beets.mediafile import MediaFile
from beets.util import syspath
class ZeroPluginTest(unittest.TestCase, TestHelper): class ZeroPluginTest(unittest.TestCase, TestHelper):
@ -61,7 +62,7 @@ class ZeroPluginTest(unittest.TestCase, TestHelper):
item.rg_track_peak = 0.0 item.rg_track_peak = 0.0
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertIsNotNone(mediafile.rg_track_peak) self.assertIsNotNone(mediafile.rg_track_peak)
self.assertIsNotNone(mediafile.rg_track_gain) self.assertIsNotNone(mediafile.rg_track_gain)
@ -71,28 +72,28 @@ class ZeroPluginTest(unittest.TestCase, TestHelper):
self.load_plugins('zero') self.load_plugins('zero')
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertIsNone(mediafile.rg_track_peak) self.assertIsNone(mediafile.rg_track_peak)
self.assertIsNone(mediafile.rg_track_gain) self.assertIsNone(mediafile.rg_track_gain)
def test_do_not_change_database(self): def test_do_not_change_database(self):
item = self.add_item_fixture(year=2000) item = self.add_item_fixture(year=2000)
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(2000, mediafile.year) self.assertEqual(2000, mediafile.year)
config['zero'] = {'fields': ['year']} config['zero'] = {'fields': ['year']}
self.load_plugins('zero') self.load_plugins('zero')
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(item['year'], 2000) self.assertEqual(item['year'], 2000)
self.assertIsNone(mediafile.year) self.assertIsNone(mediafile.year)
def test_change_database(self): def test_change_database(self):
item = self.add_item_fixture(year=2000) item = self.add_item_fixture(year=2000)
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(2000, mediafile.year) self.assertEqual(2000, mediafile.year)
config['zero'] = { config['zero'] = {
@ -102,7 +103,7 @@ class ZeroPluginTest(unittest.TestCase, TestHelper):
self.load_plugins('zero') self.load_plugins('zero')
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(item['year'], 0) self.assertEqual(item['year'], 0)
self.assertIsNone(mediafile.year) self.assertIsNone(mediafile.year)
@ -110,14 +111,14 @@ class ZeroPluginTest(unittest.TestCase, TestHelper):
path = self.create_mediafile_fixture(images=['jpg']) path = self.create_mediafile_fixture(images=['jpg'])
item = Item.from_path(path) item = Item.from_path(path)
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertNotEqual(0, len(mediafile.images)) self.assertNotEqual(0, len(mediafile.images))
config['zero'] = {'fields': [u'images']} config['zero'] = {'fields': [u'images']}
self.load_plugins('zero') self.load_plugins('zero')
item.write() item.write()
mediafile = MediaFile(item.path) mediafile = MediaFile(syspath(item.path))
self.assertEqual(0, len(mediafile.images)) self.assertEqual(0, len(mediafile.images))