Merge pull request #660 from CommandMC/feat/multiple-catalognums

Support releases with multiple catalog numbers
This commit is contained in:
Merlijn Wajer
2026-02-07 12:41:23 +01:00
committed by GitHub
5 changed files with 33 additions and 28 deletions

View File

@@ -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' % (

View File

@@ -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

View File

@@ -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:

View File

@@ -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)