mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-06 16:44:06 +00:00
Fix tests
This commit is contained in:
@@ -23,7 +23,7 @@ import mutagen.musepack
|
||||
import mutagen.wavpack
|
||||
import mutagen.optimfrog
|
||||
import mutagenext.tak
|
||||
from picard import log
|
||||
from picard import config, log
|
||||
from picard.file import File
|
||||
from picard.metadata import Metadata
|
||||
from picard.util import encode_filename, sanitize_date, mimetype
|
||||
@@ -96,16 +96,16 @@ class APEv2File(File):
|
||||
self._info(metadata, file)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
"""Save metadata to the file."""
|
||||
log.debug("Saving file %r", filename)
|
||||
try:
|
||||
tags = mutagen.apev2.APEv2(encode_filename(filename))
|
||||
except mutagen.apev2.APENoHeaderError:
|
||||
tags = mutagen.apev2.APEv2()
|
||||
if settings["clear_existing_tags"]:
|
||||
if config.setting["clear_existing_tags"]:
|
||||
tags.clear()
|
||||
elif settings['save_images_to_tags'] and metadata.images:
|
||||
elif config.setting['save_images_to_tags'] and metadata.images:
|
||||
for name, value in tags.items():
|
||||
if name.lower().startswith('cover art') and value.kind == mutagen.apev2.BINARY:
|
||||
del tags[name]
|
||||
@@ -142,7 +142,7 @@ class APEv2File(File):
|
||||
temp.setdefault(name, []).append(value)
|
||||
for name, values in temp.items():
|
||||
tags[str(name)] = values
|
||||
if settings['save_images_to_tags']:
|
||||
if config.setting['save_images_to_tags']:
|
||||
for image in metadata.images:
|
||||
if "front" == image["type"]:
|
||||
cover_filename = 'Cover Art (Front)'
|
||||
@@ -170,13 +170,13 @@ class WavPackFile(APEv2File):
|
||||
super(WavPackFile, self)._info(metadata, file)
|
||||
metadata['~format'] = self.NAME
|
||||
|
||||
def _save_and_rename(self, old_filename, metadata, settings):
|
||||
def _save_and_rename(self, old_filename, metadata):
|
||||
"""Includes an additional check for WavPack correction files"""
|
||||
wvc_filename = old_filename.replace(".wv", ".wvc")
|
||||
if isfile(wvc_filename):
|
||||
if settings["rename_files"] or settings["move_files"]:
|
||||
self._rename(wvc_filename, metadata, settings)
|
||||
return File._save_and_rename(self, old_filename, metadata, settings)
|
||||
if config.setting["rename_files"] or config.setting["move_files"]:
|
||||
self._rename(wvc_filename, metadata, config.setting)
|
||||
return File._save_and_rename(self, old_filename, metadata, config.setting)
|
||||
|
||||
class OptimFROGFile(APEv2File):
|
||||
"""OptimFROG file."""
|
||||
|
||||
@@ -147,13 +147,13 @@ class ASFFile(File):
|
||||
self._info(metadata, file)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
log.debug("Saving file %r", filename)
|
||||
file = ASF(encode_filename(filename))
|
||||
|
||||
if settings['clear_existing_tags']:
|
||||
if config.setting['clear_existing_tags']:
|
||||
file.tags.clear()
|
||||
if settings['save_images_to_tags']:
|
||||
if config.setting['save_images_to_tags']:
|
||||
cover = []
|
||||
for image in metadata.images:
|
||||
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
|
||||
@@ -169,7 +169,7 @@ class ASFFile(File):
|
||||
if name.startswith('lyrics:'):
|
||||
name = 'lyrics'
|
||||
elif name == '~rating':
|
||||
values[0] = int(values[0]) * 99 / (settings['rating_steps'] - 1)
|
||||
values[0] = int(values[0]) * 99 / (config.setting['rating_steps'] - 1)
|
||||
if name not in self.__TRANS:
|
||||
continue
|
||||
name = self.__TRANS[name]
|
||||
|
||||
@@ -241,7 +241,7 @@ class ID3File(File):
|
||||
self._info(metadata, file)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
"""Save metadata to the file."""
|
||||
log.debug("Saving file %r", filename)
|
||||
try:
|
||||
@@ -249,16 +249,16 @@ class ID3File(File):
|
||||
except mutagen.id3.ID3NoHeaderError:
|
||||
tags = compatid3.CompatID3()
|
||||
|
||||
if settings['clear_existing_tags']:
|
||||
if config.setting['clear_existing_tags']:
|
||||
tags.clear()
|
||||
if settings['save_images_to_tags'] and metadata.images:
|
||||
if config.setting['save_images_to_tags'] and metadata.images:
|
||||
tags.delall('APIC')
|
||||
|
||||
if settings['write_id3v1']:
|
||||
if config.setting['write_id3v1']:
|
||||
v1 = 2
|
||||
else:
|
||||
v1 = 0
|
||||
encoding = {'utf-8': 3, 'utf-16': 1}.get(settings['id3v2_encoding'], 0)
|
||||
encoding = {'utf-8': 3, 'utf-16': 1}.get(config.setting['id3v2_encoding'], 0)
|
||||
|
||||
if 'tracknumber' in metadata:
|
||||
if 'totaltracks' in metadata:
|
||||
@@ -274,7 +274,7 @@ class ID3File(File):
|
||||
text = metadata['discnumber']
|
||||
tags.add(id3.TPOS(encoding=0, text=text))
|
||||
|
||||
if settings['save_images_to_tags']:
|
||||
if config.setting['save_images_to_tags']:
|
||||
# This is necessary because mutagens HashKey for APIC frames only
|
||||
# includes the FrameID (APIC) and description - it's basically
|
||||
# impossible to save two images, even of different types, without
|
||||
@@ -325,15 +325,15 @@ class ID3File(File):
|
||||
elif name == '~rating':
|
||||
# Search for an existing POPM frame to get the current playcount
|
||||
for frame in tags.values():
|
||||
if frame.FrameID == 'POPM' and frame.email == settings['rating_user_email']:
|
||||
if frame.FrameID == 'POPM' and frame.email == config.setting['rating_user_email']:
|
||||
count = getattr(frame, 'count', 0)
|
||||
break
|
||||
else:
|
||||
count = 0
|
||||
|
||||
# Convert rating to range between 0 and 255
|
||||
rating = int(round(float(values[0]) * 255 / (settings['rating_steps'] - 1)))
|
||||
tags.add(id3.POPM(email=settings['rating_user_email'], rating=rating, count=count))
|
||||
rating = int(round(float(values[0]) * 255 / (config.setting['rating_steps'] - 1)))
|
||||
tags.add(id3.POPM(email=config.setting['rating_user_email'], rating=rating, count=count))
|
||||
elif name in self.__rtranslate:
|
||||
frameid = self.__rtranslate[name]
|
||||
if frameid.startswith('W'):
|
||||
@@ -374,14 +374,14 @@ class ID3File(File):
|
||||
if tipl.people:
|
||||
tags.add(tipl)
|
||||
|
||||
if settings['write_id3v23']:
|
||||
if config.setting['write_id3v23']:
|
||||
tags.update_to_v23()
|
||||
tags.save(encode_filename(filename), v2=3, v1=v1)
|
||||
else:
|
||||
tags.update_to_v24()
|
||||
tags.save(encode_filename(filename), v2=4, v1=v1)
|
||||
|
||||
if self._IsMP3 and settings["remove_ape_from_mp3"]:
|
||||
if self._IsMP3 and config.setting["remove_ape_from_mp3"]:
|
||||
try: mutagen.apev2.delete(encode_filename(filename))
|
||||
except: pass
|
||||
|
||||
|
||||
@@ -144,13 +144,13 @@ class MP4File(File):
|
||||
self._info(metadata, file)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
log.debug("Saving file %r", filename)
|
||||
file = MP4(encode_filename(self.filename))
|
||||
if file.tags is None:
|
||||
file.add_tags()
|
||||
|
||||
if settings["clear_existing_tags"]:
|
||||
if config.setting["clear_existing_tags"]:
|
||||
file.tags.clear()
|
||||
|
||||
for name, values in metadata.rawitems():
|
||||
@@ -185,7 +185,7 @@ class MP4File(File):
|
||||
else:
|
||||
file.tags["disk"] = [(int(metadata["discnumber"]), 0)]
|
||||
|
||||
if settings['save_images_to_tags']:
|
||||
if config.setting['save_images_to_tags']:
|
||||
covr = []
|
||||
for image in metadata.images:
|
||||
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
|
||||
|
||||
@@ -107,27 +107,27 @@ class VCommentFile(File):
|
||||
self._info(metadata, file)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
"""Save metadata to the file."""
|
||||
log.debug("Saving file %r", filename)
|
||||
file = self._File(encode_filename(filename))
|
||||
if file.tags is None:
|
||||
file.add_tags()
|
||||
if settings["clear_existing_tags"]:
|
||||
if config.setting["clear_existing_tags"]:
|
||||
file.tags.clear()
|
||||
if self._File == mutagen.flac.FLAC and (
|
||||
settings["clear_existing_tags"] or
|
||||
(settings['save_images_to_tags'] and metadata.images)):
|
||||
config.setting["clear_existing_tags"] or
|
||||
(config.setting['save_images_to_tags'] and metadata.images)):
|
||||
file.clear_pictures()
|
||||
tags = {}
|
||||
for name, value in metadata.items():
|
||||
if name == '~rating':
|
||||
# Save rating according to http://code.google.com/p/quodlibet/wiki/Specs_VorbisComments
|
||||
if settings['rating_user_email']:
|
||||
name = 'rating:%s' % settings['rating_user_email']
|
||||
if config.setting['rating_user_email']:
|
||||
name = 'rating:%s' % config.setting['rating_user_email']
|
||||
else:
|
||||
name = 'rating'
|
||||
value = unicode(float(value) / (settings['rating_steps'] - 1))
|
||||
value = unicode(float(value) / (config.setting['rating_steps'] - 1))
|
||||
# don't save private tags
|
||||
elif name.startswith("~"):
|
||||
continue
|
||||
@@ -151,7 +151,7 @@ class VCommentFile(File):
|
||||
if "totaldiscs" in metadata:
|
||||
tags.setdefault(u"DISCTOTAL", []).append(metadata["totaldiscs"])
|
||||
|
||||
if settings['save_images_to_tags']:
|
||||
if config.setting['save_images_to_tags']:
|
||||
for image in metadata.images:
|
||||
if config.setting["save_only_front_images_to_tags"] and image["type"] != "front":
|
||||
continue
|
||||
@@ -167,7 +167,7 @@ class VCommentFile(File):
|
||||
base64.standard_b64encode(picture.write()))
|
||||
file.tags.update(tags)
|
||||
kwargs = {}
|
||||
if self._File == mutagen.flac.FLAC and settings["remove_id3_from_flac"]:
|
||||
if self._File == mutagen.flac.FLAC and config.setting["remove_id3_from_flac"]:
|
||||
kwargs["deleteid3"] = True
|
||||
try:
|
||||
file.save(**kwargs)
|
||||
|
||||
@@ -40,6 +40,6 @@ class WAVFile(File):
|
||||
self._add_path_to_metadata(metadata)
|
||||
return metadata
|
||||
|
||||
def _save(self, filename, metadata, settings):
|
||||
def _save(self, filename, metadata):
|
||||
log.debug("Saving file %r", filename)
|
||||
pass
|
||||
|
||||
@@ -2,52 +2,47 @@ import os.path
|
||||
import unittest
|
||||
import shutil
|
||||
from tempfile import mkstemp
|
||||
from picard import log
|
||||
from picard import config, log
|
||||
from picard.metadata import Metadata
|
||||
import picard.formats
|
||||
from PyQt4 import QtCore
|
||||
|
||||
|
||||
settings = {
|
||||
'enabled_plugins': '',
|
||||
'clear_existing_tags': False,
|
||||
'remove_images_from_tags': False,
|
||||
'write_id3v1': True,
|
||||
'id3v2_encoding': 'utf-8',
|
||||
'save_images_to_tags': True,
|
||||
'write_id3v23': False,
|
||||
'remove_ape_from_mp3': False,
|
||||
'remove_id3_from_flac': False,
|
||||
'rating_steps': 6,
|
||||
'rating_user_email': 'users@musicbrainz.org',
|
||||
'save_only_front_images_to_tags': False,
|
||||
}
|
||||
|
||||
|
||||
class FakeTagger(QtCore.QObject):
|
||||
|
||||
file_state_changed = QtCore.pyqtSignal(int)
|
||||
|
||||
def __init__(self):
|
||||
QtCore.QObject.__init__(self)
|
||||
if "PICARD_DEBUG" in os.environ:
|
||||
self.log = log.DebugLog()
|
||||
else:
|
||||
self.log = log.Log()
|
||||
QtCore.QObject.log = self.log
|
||||
QtCore.QObject.config = config
|
||||
QtCore.QObject.log = log
|
||||
|
||||
def emit(self, *args):
|
||||
pass
|
||||
|
||||
|
||||
class FakeConfig():
|
||||
def __init__(self):
|
||||
self.setting = {
|
||||
'enabled_plugins': '',
|
||||
'clear_existing_tags': False,
|
||||
'remove_images_from_tags': False,
|
||||
'write_id3v1': True,
|
||||
'id3v2_encoding': 'utf-8',
|
||||
'save_images_to_tags': True,
|
||||
'write_id3v23': False,
|
||||
'remove_ape_from_mp3': False,
|
||||
'remove_id3_from_flac': False,
|
||||
'rating_steps': 6,
|
||||
'rating_user_email': 'users@musicbrainz.org',
|
||||
'save_only_front_images_to_tags': False,
|
||||
}
|
||||
|
||||
|
||||
def save_and_load_metadata(filename, metadata):
|
||||
"""Save new metadata to a file and load it again."""
|
||||
f = picard.formats.open(filename)
|
||||
loaded_metadata = f._load(filename)
|
||||
f._copy_loaded_metadata(loaded_metadata)
|
||||
f._save(filename, metadata, f.config.setting)
|
||||
f._save(filename, metadata)
|
||||
f = picard.formats.open(filename)
|
||||
loaded_metadata = f._load(filename)
|
||||
return loaded_metadata
|
||||
@@ -64,8 +59,8 @@ class FormatsTest(unittest.TestCase):
|
||||
fd, self.filename = mkstemp(suffix=os.path.splitext(self.original)[1])
|
||||
os.close(fd)
|
||||
shutil.copy(self.original, self.filename)
|
||||
config.setting = settings
|
||||
QtCore.QObject.tagger = FakeTagger()
|
||||
QtCore.QObject.config = FakeConfig()
|
||||
|
||||
def tearDown(self):
|
||||
if not self.original:
|
||||
@@ -506,7 +501,6 @@ class TestCoverArt(unittest.TestCase):
|
||||
os.close(fd)
|
||||
shutil.copy(original, self.filename)
|
||||
QtCore.QObject.tagger = FakeTagger()
|
||||
QtCore.QObject.config = FakeConfig()
|
||||
|
||||
def _tear_down(self):
|
||||
os.unlink(self.filename)
|
||||
@@ -544,7 +538,7 @@ class TestCoverArt(unittest.TestCase):
|
||||
metadata = Metadata()
|
||||
imgdata = tests[t]['head'] + dummyload
|
||||
metadata.add_image(tests[t]['mime'], imgdata)
|
||||
f._save(self.filename, metadata, f.config.setting)
|
||||
f._save(self.filename, metadata)
|
||||
|
||||
f = picard.formats.open(self.filename)
|
||||
loaded_metadata = f._load(self.filename)
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import unittest
|
||||
import picard
|
||||
from picard import config
|
||||
from picard.metadata import Metadata
|
||||
from picard.mbxml import track_to_metadata, release_to_metadata
|
||||
|
||||
class config:
|
||||
setting = {
|
||||
"standardize_tracks": False,
|
||||
"standardize_artists": False,
|
||||
"standardize_releases": False,
|
||||
"translate_artist_names": False
|
||||
}
|
||||
|
||||
settings = {
|
||||
"standardize_tracks": False,
|
||||
"standardize_artists": False,
|
||||
"standardize_releases": False,
|
||||
"translate_artist_names": False
|
||||
}
|
||||
|
||||
|
||||
class XmlNode(object):
|
||||
|
||||
@@ -34,6 +37,7 @@ class XmlNode(object):
|
||||
class TrackTest(unittest.TestCase):
|
||||
|
||||
def test_1(self):
|
||||
config.setting = settings
|
||||
class Track:
|
||||
pass
|
||||
node = XmlNode(children={
|
||||
@@ -65,7 +69,7 @@ class TrackTest(unittest.TestCase):
|
||||
})
|
||||
track = Track()
|
||||
m = track.metadata = Metadata()
|
||||
track_to_metadata(node, track, config)
|
||||
track_to_metadata(node, track)
|
||||
self.failUnlessEqual('123', m['musicbrainz_trackid'])
|
||||
self.failUnlessEqual('456; 789', m['musicbrainz_artistid'])
|
||||
self.failUnlessEqual('Foo', m['title'])
|
||||
@@ -77,6 +81,7 @@ class TrackTest(unittest.TestCase):
|
||||
class ReleaseTest(unittest.TestCase):
|
||||
|
||||
def test_1(self):
|
||||
config.setting = settings
|
||||
release = XmlNode(attribs={'id': '123'}, children={
|
||||
'title': [XmlNode(text='Foo')],
|
||||
'status': [XmlNode(text='Official')],
|
||||
@@ -111,7 +116,7 @@ class ReleaseTest(unittest.TestCase):
|
||||
})]
|
||||
})
|
||||
m = Metadata()
|
||||
release_to_metadata(release, m, config)
|
||||
release_to_metadata(release, m)
|
||||
self.failUnlessEqual('123', m['musicbrainz_albumid'])
|
||||
self.failUnlessEqual('456; 789', m['musicbrainz_albumartistid'])
|
||||
self.failUnlessEqual('Foo', m['album'])
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
import unittest
|
||||
import picard
|
||||
from PyQt4 import QtCore
|
||||
from picard import config
|
||||
from picard.script import ScriptParser
|
||||
from picard.metadata import Metadata
|
||||
|
||||
class FakeConfig(object):
|
||||
def __init__(self):
|
||||
self.setting = {
|
||||
'enabled_plugins': '',
|
||||
}
|
||||
|
||||
|
||||
class ScriptParserTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
QtCore.QObject.config = FakeConfig()
|
||||
config.setting = {
|
||||
'enabled_plugins': '',
|
||||
}
|
||||
self.parser = ScriptParser()
|
||||
|
||||
def test_cmd_noop(self):
|
||||
|
||||
Reference in New Issue
Block a user