Merge pull request #1001 from phw/PICARD-1376-fix-ape-tag-deletion

PICARD-1376: Fix tag deletion for Ape files
This commit is contained in:
Philipp Wolfer
2018-10-17 09:20:49 +02:00
committed by GitHub
2 changed files with 19 additions and 7 deletions

View File

@@ -189,17 +189,18 @@ class APEv2File(File):
real_name = self._get_tag_name(tag)
if real_name in ('Lyrics', 'Comment', 'Performer'):
tag_type = re.compile(r"\(%s\)" % tag.split(':', 1)[1])
for item in tags.get(real_name):
if tag_type.search(item):
tags.get(real_name).remove(item)
existing_tags = tags.get(real_name)
if existing_tags:
for item in existing_tags:
if tag_type.search(item):
tags.get(real_name).remove(item)
elif tag in ('totaltracks', 'totaldiscs'):
tagstr = real_name.lower() + 'number'
try:
if tagstr in metadata:
tags[real_name] = metadata[tagstr]
except KeyError:
pass
else:
del tags[real_name]
if real_name in tags:
del tags[real_name]
def _get_tag_name(self, name):
if name.startswith('lyrics:'):

View File

@@ -219,6 +219,17 @@ class CommonTests:
self.assertIn('~rating', original_metadata.keys())
self.assertNotIn('~rating', new_metadata.keys())
@skipUnlessTestfile
def test_delete_non_existant_tags(self):
metadata = Metadata()
metadata.delete('albumartist')
metadata.delete('performer:drums')
metadata.delete('totaltracks')
new_metadata = save_and_load_metadata(self.filename, metadata)
self.assertNotIn('albumartist', new_metadata.keys())
self.assertNotIn('performer:drums', new_metadata.keys())
self.assertNotIn('totaltracks', new_metadata.keys())
@skipUnlessTestfile
def test_delete_complex_tags(self):
metadata = Metadata()