55from src .exceptions .Unauthorized import UnauthorizedException
66from time import sleep
77
8+ from src .flask_config import Config
89
10+
11+ ### Musicbrainz requests must be followed by a 1 second sleep if being sent in bulk to avoid rate limiting
912class MusicbrainzClient :
1013 request_headers = {
1114 "Accept" : "application/json" ,
12- "User-Agent" :
"Application PlaylistManager/1.0 - Hobby project ([email protected] )" ,
15+ "User-Agent" : Config (). MUSICBRAINZ_USER_AGENT ,
1316 }
1417
1518 def response_handler (self , response : requests .Response , jsonify = True ):
@@ -30,23 +33,23 @@ def get_genre_list(self, limit=100, offset=0) -> List[str]:
3033 else :
3134 query = f"?limit={ limit } &offset={ offset } "
3235 response = requests .get (
33- url = "https://musicbrainz.org/ws/2 /genre/all" + query ,
36+ url = Config (). MUSICBRAINZ_URL + " /genre/all" + query ,
3437 headers = self .request_headers ,
3538 )
3639 data = response .json ()
3740 genre_list = [genre ["name" ] for genre in data ["genres" ]]
3841 if genre_list == []:
3942 return []
4043 else :
41- sleep (2 ) # Needed to avoid rate limiting
44+ sleep (1 )
4245 return genre_list + self .get_genre_list (limit , offset + limit )
4346
4447 def get_album_genres (self , artist_name : str , album_title : str ) -> List [str ]:
4548 query = quote_plus (
4649 f'artistname:"{ artist_name } " AND releasegroup:"{ album_title } "'
4750 )
4851 response = requests .get (
49- url = "https://musicbrainz.org/ws/2 /release-group?query=" + query ,
52+ url = Config (). MUSICBRAINZ_URL + " /release-group?query=" + query ,
5053 headers = self .request_headers ,
5154 )
5255 data = response .json ()
0 commit comments