Merge pull request #660 from CommandMC/feat/multiple-catalognums
Support releases with multiple catalog numbers
This commit is contained in:
@@ -26,15 +26,15 @@ Example Disc ID: KnpGsLhvH.lPrNc1PBL21lb9Bg4-"""
|
||||
:param md: MusicBrainz's metadata about the disc
|
||||
:type md: `DiscMetadata`
|
||||
"""
|
||||
print(' Artist: %s' % md.artist.encode('utf-8'))
|
||||
print(' Title: %s' % md.releaseTitle.encode('utf-8'))
|
||||
print(' Type: %s' % str(md.releaseType).encode('utf-8'))
|
||||
print(' URL: %s' % md.url)
|
||||
print(' Tracks: %d' % len(md.tracks))
|
||||
if md.catalogNumber:
|
||||
print(' Cat no: %s' % md.catalogNumber)
|
||||
print(' Artist: %s' % md.artist.encode('utf-8'))
|
||||
print(' Title: %s' % md.releaseTitle.encode('utf-8'))
|
||||
print(' Type: %s' % str(md.releaseType).encode('utf-8'))
|
||||
print(' URL: %s' % md.url)
|
||||
print(' Tracks: %d' % len(md.tracks))
|
||||
if md.catalogNumbers:
|
||||
print(' Cat no(s): %s' % ', '.join(md.catalogNumbers))
|
||||
if md.barcode:
|
||||
print(' Barcode: %s' % md.barcode)
|
||||
print(' Barcode: %s' % md.barcode)
|
||||
|
||||
for j, track in enumerate(md.tracks):
|
||||
print(' Track %2d: %s - %s' % (
|
||||
|
||||
@@ -81,8 +81,8 @@ class DiscMetadata:
|
||||
:vartype discNumber: int or None
|
||||
:cvar discTotal: total number of discs in the chosen release
|
||||
:vartype discTotal: int or None
|
||||
:cvar catalogNumber: release catalog number
|
||||
:vartype catalogNumber: str or None
|
||||
:cvar catalogNumbers: release catalog number
|
||||
:vartype catalogNumbers: list[str]
|
||||
:cvar barcode: release barcode
|
||||
:vartype barcode: str or None
|
||||
"""
|
||||
@@ -103,7 +103,7 @@ class DiscMetadata:
|
||||
mbidArtist = None
|
||||
url = None
|
||||
|
||||
catalogNumber = None
|
||||
catalogNumbers: list[str]
|
||||
barcode = None
|
||||
countries = None
|
||||
discNumber = None
|
||||
@@ -112,6 +112,7 @@ class DiscMetadata:
|
||||
|
||||
def __init__(self):
|
||||
self.tracks = []
|
||||
self.catalogNumbers = []
|
||||
|
||||
|
||||
def _record(record, which, name, what):
|
||||
@@ -289,9 +290,13 @@ def _getMetadata(release, discid=None, country=None):
|
||||
discMD.countries = list(filter(None, countries))
|
||||
else:
|
||||
discMD.countries = list(filter(None, [release.get('country', None)]))
|
||||
lil = release.get('label-info-list', [{}])
|
||||
if lil:
|
||||
discMD.catalogNumber = lil[0].get('catalog-number')
|
||||
lil = release.get('label-info-list', [])
|
||||
catalog_numbers = []
|
||||
for li in lil:
|
||||
cn = li.get('catalog-number')
|
||||
if cn and cn not in catalog_numbers:
|
||||
catalog_numbers.append(cn)
|
||||
discMD.catalogNumbers = catalog_numbers
|
||||
tainted = False
|
||||
duration = 0
|
||||
|
||||
|
||||
@@ -151,8 +151,8 @@ class Program:
|
||||
@staticmethod
|
||||
def addDisambiguation(template_part, metadata):
|
||||
"""Add disambiguation to template path part string."""
|
||||
if metadata.catalogNumber:
|
||||
template_part += ' (%s)' % metadata.catalogNumber
|
||||
if metadata.catalogNumbers:
|
||||
template_part += ' (%s)' % ', '.join(metadata.catalogNumbers)
|
||||
elif metadata.barcode:
|
||||
template_part += ' (%s)' % metadata.barcode
|
||||
return template_part
|
||||
@@ -221,7 +221,7 @@ class Program:
|
||||
v['d'] = metadata.releaseTitle
|
||||
v['D'] = metadata.title
|
||||
v['B'] = metadata.barcode
|
||||
v['C'] = metadata.catalogNumber
|
||||
v['C'] = ', '.join(metadata.catalogNumbers)
|
||||
v['c'] = metadata.releaseDisambCmt
|
||||
v['M'] = metadata.discTotal
|
||||
v['N'] = metadata.discNumber
|
||||
@@ -332,20 +332,20 @@ class Program:
|
||||
print('\nMatching releases:')
|
||||
|
||||
for metadata in metadatas:
|
||||
print('\nArtist : %s' % metadata.artist)
|
||||
print('Title : %s' % metadata.releaseTitle)
|
||||
print('Duration: %s' % common.formatTime(
|
||||
print('\nArtist : %s' % metadata.artist)
|
||||
print('Title : %s' % metadata.releaseTitle)
|
||||
print('Duration : %s' % common.formatTime(
|
||||
metadata.duration / 1000.0))
|
||||
print('URL : %s' % metadata.url)
|
||||
print('Release : %s' % metadata.mbid)
|
||||
print('Type : %s' % metadata.releaseType)
|
||||
print('URL : %s' % metadata.url)
|
||||
print('Release : %s' % metadata.mbid)
|
||||
print('Type : %s' % metadata.releaseType)
|
||||
if metadata.barcode:
|
||||
print("Barcode : %s" % metadata.barcode)
|
||||
print("Barcode : %s" % metadata.barcode)
|
||||
if metadata.countries:
|
||||
print("Country : %s" % ', '.join(metadata.countries))
|
||||
print("Country : %s" % ', '.join(metadata.countries))
|
||||
# TODO: Add test for non ASCII catalog numbers: see issue #215
|
||||
if metadata.catalogNumber:
|
||||
print("Cat no : %s" % metadata.catalogNumber)
|
||||
if metadata.catalogNumbers:
|
||||
print("Cat no(s): %s" % ', '.join(metadata.catalogNumbers))
|
||||
|
||||
delta = abs(metadata.duration - ittoc.duration())
|
||||
if delta not in deltas:
|
||||
|
||||
@@ -287,7 +287,7 @@ class MetadataTestCase(unittest.TestCase):
|
||||
self.assertEqual(metadata.url,
|
||||
'https://musicbrainz.org/release'
|
||||
'/6109ceed-7e21-490b-b5ad-3a66b4e4cfbb')
|
||||
self.assertEqual(metadata.catalogNumber, '[none]')
|
||||
self.assertEqual(metadata.catalogNumbers, ['[none]'])
|
||||
self.assertEqual(metadata.barcode, '700261430249')
|
||||
|
||||
self.assertEqual(len(metadata.tracks), 16)
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user