From 7d2dddcca51932330f2b4def528df319c4e2b14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0ar=C5=ABnas=20Nejus?= Date: Sun, 25 Jan 2026 01:31:13 +0000 Subject: [PATCH] Refactor parsing language and script --- beetsplug/musicbrainz.py | 8 ++------ test/plugins/factories/musicbrainz.py | 5 +++++ test/plugins/test_musicbrainz.py | 21 ++++++++++++++------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/beetsplug/musicbrainz.py b/beetsplug/musicbrainz.py index 0017d1931..3f3ce4bea 100644 --- a/beetsplug/musicbrainz.py +++ b/beetsplug/musicbrainz.py @@ -596,6 +596,8 @@ class MusicBrainzPlugin(MusicBrainzAPIMixin, MetadataSourcePlugin): data_url=urljoin(BASE_URL, f"release/{release['id']}"), barcode=release.get("barcode"), genre=genre if (genre := self._parse_genre(release)) else None, + script=release["text_representation"]["script"], + language=release["text_representation"]["language"], **self._parse_release_group(release["release_group"]), **self._parse_label_infos(release["label_info"]), **self._parse_external_ids(release.get("url_relations", [])), @@ -621,12 +623,6 @@ class MusicBrainzPlugin(MusicBrainzAPIMixin, MetadataSourcePlugin): ) ) - # Text representation data. - if release.get("text_representation"): - rep = release["text_representation"] - info.script = rep.get("script") - info.language = rep.get("language") - # Media (format). if release["media"]: # If all media are the same, use that medium name diff --git a/test/plugins/factories/musicbrainz.py b/test/plugins/factories/musicbrainz.py index 730f89a35..cdda3e52f 100644 --- a/test/plugins/factories/musicbrainz.py +++ b/test/plugins/factories/musicbrainz.py @@ -144,3 +144,8 @@ class LabelInfoFactory(factory.DictFactory): lambda o: f"{o.label['name'][:3].upper()}123" ) label = factory.SubFactory(LabelFactory) + + +class TextRepresentationFactory(factory.DictFactory): + language = "eng" + script = "Latn" diff --git a/test/plugins/test_musicbrainz.py b/test/plugins/test_musicbrainz.py index ce9329ded..7507a60c6 100644 --- a/test/plugins/test_musicbrainz.py +++ b/test/plugins/test_musicbrainz.py @@ -72,6 +72,10 @@ def label_info_factory(**kwargs) -> mb.LabelInfo: return factories.LabelInfoFactory.build(**kwargs) +def text_representation_factory(**kwargs) -> mb.TextRepresentation: + return factories.TextRepresentationFactory.build(**kwargs) + + class MusicBrainzTestCase(BeetsTestCase): def setUp(self): super().setUp() @@ -100,10 +104,7 @@ class MusicBrainzTestCase(BeetsTestCase): "genres": [genre_factory()], "tags": [tag_factory()], "label_info": [label_info_factory()], - "text_representation": { - "script": "SCRIPT", - "language": "LANGUAGE", - }, + "text_representation": text_representation_factory(), "country": "COUNTRY", "status": "STATUS", "barcode": "BARCODE", @@ -375,8 +376,8 @@ class MBAlbumInfoTest(MusicBrainzTestCase): def test_parse_textrepr(self): release = self._make_release() d = self.mb.album_info(release) - assert d.script == "SCRIPT" - assert d.language == "LANGUAGE" + assert d.script == "Latn" + assert d.language == "eng" def test_parse_country(self): release = self._make_release() @@ -421,7 +422,7 @@ class MBAlbumInfoTest(MusicBrainzTestCase): def test_missing_language(self): release = self._make_release() - del release["text_representation"]["language"] + release["text_representation"]["language"] = None d = self.mb.album_info(release) assert d.language is None @@ -813,6 +814,7 @@ class MBLibraryTest(MusicBrainzTestCase): "artist_credit": [artist_credit_factory()], "release_group": release_group_factory(), "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), "release_relations": [ { "type": "transl-tracklisting", @@ -846,6 +848,7 @@ class MBLibraryTest(MusicBrainzTestCase): "release_group": release_group_factory(), "country": "COUNTRY", "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), }, ] @@ -880,6 +883,7 @@ class MBLibraryTest(MusicBrainzTestCase): "artist_credit": [artist_credit_factory()], "release_group": release_group_factory(), "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), } ] @@ -914,6 +918,7 @@ class MBLibraryTest(MusicBrainzTestCase): "artist_credit": [artist_credit_factory()], "release_group": release_group_factory(), "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), } ] @@ -948,6 +953,7 @@ class MBLibraryTest(MusicBrainzTestCase): "artist_credit": [artist_credit_factory()], "release_group": release_group_factory(), "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), "release_relations": [ { "type": "remaster", @@ -1054,6 +1060,7 @@ class TestMusicBrainzPlugin(PluginMixin): "artist_credit": [artist_credit_factory()], "release_group": release_group_factory(), "label_info": [label_info_factory()], + "text_representation": text_representation_factory(), }, ) candidates = list(mb.candidates([], "hello", "there", False))