4949 "year" : "date" ,
5050}
5151
52- musicbrainzngs .set_useragent ("beets" , beets .__version__ , "https://beets.io/" )
52+
53+ class MbInterface ():
54+ VALID_BROWSE_INCLUDES = musicbrainzngs .VALID_BROWSE_INCLUDES
55+ VALID_INCLUDES = musicbrainzngs .VALID_INCLUDES
56+
57+ class WebServiceError (musicbrainzngs .WebServiceError ):
58+ pass
59+
60+ class MusicBrainzError (musicbrainzngs .MusicBrainzError ):
61+ pass
62+
63+ class ResponseError (musicbrainzngs .ResponseError ):
64+ pass
65+
66+ def __init__ (self ):
67+ pass
68+
69+ def set_useragent (self , app , version , contact = None ):
70+ return musicbrainzngs .set_useragent (app , version , contact = contact )
71+
72+ def set_hostname (self , hostname , https ):
73+ return musicbrainzngs .set_hostname (hostname , https )
74+
75+ def set_rate_limit (self , interval , ratelimit ):
76+ return musicbrainzngs .set_rate_limit (interval , ratelimit )
77+
78+ def browse_recordings (self , artist = None , release = None , includes = [],
79+ limit = None , offset = None ):
80+ return musicbrainzngs .browse_recordings (
81+ artist = artist , release = release , includes = includes ,
82+ limit = limit , offset = offset )
83+
84+ def search_recordings (self , query = '' , limit = None , offset = None ,
85+ strict = False , ** fields ):
86+ return musicbrainzngs .search_recordings (
87+ query = query , limit = limit , offset = offset ,
88+ strict = strict , ** fields )
89+
90+ def get_release_by_id (self , id , includes = [],
91+ release_status = [], release_type = []):
92+ return musicbrainzngs .get_release_by_id (id , includes = includes ,
93+ release_status = release_status ,
94+ release_type = release_type )
95+
96+ def get_recording_by_id (self , id , includes = [],
97+ release_status = [], release_type = []):
98+ return musicbrainzngs .get_recording_by_id (id , includes = includes ,
99+ release_status = release_status ,
100+ release_type = release_type )
101+
102+ def search_releases (self , query = '' , limit = None , offset = None ,
103+ strict = False , ** fields ):
104+ return musicbrainzngs .search_releases (query = query , limit = limit , offset = offset ,
105+ strict = strict , ** fields )
106+
107+
108+ mbi = MbInterface ()
109+ mbi .set_useragent ("beets" , beets .__version__ , "https://beets.io/" )
53110
54111
55112class MusicBrainzAPIError (util .HumanReadableException ):
@@ -59,7 +116,7 @@ class MusicBrainzAPIError(util.HumanReadableException):
59116
60117 def __init__ (self , reason , verb , query , tb = None ):
61118 self .query = query
62- if isinstance (reason , musicbrainzngs .WebServiceError ):
119+ if isinstance (reason , mbi .WebServiceError ):
63120 reason = "MusicBrainz not reachable"
64121 super ().__init__ (reason , verb , tb )
65122
@@ -94,14 +151,14 @@ def get_message(self):
94151 "recording-rels" ,
95152 "release-rels" ,
96153]
97- if "work-level-rels" in musicbrainzngs .VALID_BROWSE_INCLUDES ["recording" ]:
154+ if "work-level-rels" in mbi .VALID_BROWSE_INCLUDES ["recording" ]:
98155 BROWSE_INCLUDES .append ("work-level-rels" )
99156BROWSE_CHUNKSIZE = 100
100157BROWSE_MAXTRACKS = 500
101158TRACK_INCLUDES = ["artists" , "aliases" , "isrcs" ]
102- if "work-level-rels" in musicbrainzngs .VALID_INCLUDES ["recording" ]:
159+ if "work-level-rels" in mbi .VALID_INCLUDES ["recording" ]:
103160 TRACK_INCLUDES += ["work-level-rels" , "artist-rels" ]
104- if "genres" in musicbrainzngs .VALID_INCLUDES ["recording" ]:
161+ if "genres" in mbi .VALID_INCLUDES ["recording" ]:
105162 RELEASE_INCLUDES += ["genres" ]
106163
107164
@@ -122,8 +179,8 @@ def configure():
122179 # Only call set_hostname when a custom server is configured. Since
123180 # musicbrainz-ngs connects to musicbrainz.org with HTTPS by default
124181 if hostname != "musicbrainz.org" :
125- musicbrainzngs .set_hostname (hostname , https )
126- musicbrainzngs .set_rate_limit (
182+ mbi .set_hostname (hostname , https )
183+ mbi .set_rate_limit (
127184 config ["musicbrainz" ]["ratelimit_interval" ].as_number (),
128185 config ["musicbrainz" ]["ratelimit" ].get (int ),
129186 )
@@ -427,7 +484,7 @@ def album_info(release: Dict) -> beets.autotag.hooks.AlbumInfo:
427484 for i in range (0 , ntracks , BROWSE_CHUNKSIZE ):
428485 log .debug ("Retrieving tracks starting at {}" , i )
429486 recording_list .extend (
430- musicbrainzngs .browse_recordings (
487+ mbi .browse_recordings (
431488 release = release ["id" ],
432489 limit = BROWSE_CHUNKSIZE ,
433490 includes = BROWSE_INCLUDES ,
@@ -720,10 +777,10 @@ def match_album(
720777
721778 try :
722779 log .debug ("Searching for MusicBrainz releases with: {!r}" , criteria )
723- res = musicbrainzngs .search_releases (
780+ res = mbi .search_releases (
724781 limit = config ["musicbrainz" ]["searchlimit" ].get (int ), ** criteria
725782 )
726- except musicbrainzngs .MusicBrainzError as exc :
783+ except mbi .MusicBrainzError as exc :
727784 raise MusicBrainzAPIError (
728785 exc , "release search" , criteria , traceback .format_exc ()
729786 )
@@ -751,10 +808,10 @@ def match_track(
751808 return
752809
753810 try :
754- res = musicbrainzngs .search_recordings (
811+ res = mbi .search_recordings (
755812 limit = config ["musicbrainz" ]["searchlimit" ].get (int ), ** criteria
756813 )
757- except musicbrainzngs .MusicBrainzError as exc :
814+ except mbi .MusicBrainzError as exc :
758815 raise MusicBrainzAPIError (
759816 exc , "recording search" , criteria , traceback .format_exc ()
760817 )
@@ -794,7 +851,7 @@ def _find_actual_release_from_pseudo_release(
794851
795852 actual_id = translations [0 ]["target" ]
796853
797- return musicbrainzngs .get_release_by_id (actual_id , RELEASE_INCLUDES )
854+ return mbi .get_release_by_id (actual_id , RELEASE_INCLUDES )
798855
799856
800857def _merge_pseudo_and_actual_album (
@@ -847,18 +904,18 @@ def album_for_id(releaseid: str) -> Optional[beets.autotag.hooks.AlbumInfo]:
847904 log .debug ("Invalid MBID ({0})." , releaseid )
848905 return None
849906 try :
850- res = musicbrainzngs .get_release_by_id (albumid , RELEASE_INCLUDES )
907+ res = mbi .get_release_by_id (albumid , RELEASE_INCLUDES )
851908
852909 # resolve linked release relations
853910 actual_res = None
854911
855912 if res ["release" ].get ("status" ) == "Pseudo-Release" :
856913 actual_res = _find_actual_release_from_pseudo_release (res )
857914
858- except musicbrainzngs .ResponseError :
915+ except mbi .ResponseError :
859916 log .debug ("Album ID match failed." )
860917 return None
861- except musicbrainzngs .MusicBrainzError as exc :
918+ except mbi .MusicBrainzError as exc :
862919 raise MusicBrainzAPIError (
863920 exc , "get release by ID" , albumid , traceback .format_exc ()
864921 )
@@ -883,11 +940,11 @@ def track_for_id(releaseid: str) -> Optional[beets.autotag.hooks.TrackInfo]:
883940 log .debug ("Invalid MBID ({0})." , releaseid )
884941 return None
885942 try :
886- res = musicbrainzngs .get_recording_by_id (trackid , TRACK_INCLUDES )
887- except musicbrainzngs .ResponseError :
943+ res = mbi .get_recording_by_id (trackid , TRACK_INCLUDES )
944+ except mbi .ResponseError :
888945 log .debug ("Track ID match failed." )
889946 return None
890- except musicbrainzngs .MusicBrainzError as exc :
947+ except mbi .MusicBrainzError as exc :
891948 raise MusicBrainzAPIError (
892949 exc , "get recording by ID" , trackid , traceback .format_exc ()
893950 )
0 commit comments