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

View file

@ -27,7 +27,7 @@ from beets import plugins, config, ui
from beets.library import Item
from beets.dbcore import types
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_ui_importer import TerminalImportSessionSetup
@ -118,7 +118,7 @@ class ItemWriteTest(unittest.TestCase, TestHelper):
item = self.add_item_fixture(artist=u'XXX')
item.write()
mediafile = MediaFile(item.path)
mediafile = MediaFile(syspath(item.path))
self.assertEqual(mediafile.artist, u'YYY')
def register_listener(self, event, func):

View file

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

View file

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