mirror of
				https://github.com/KevinMidboe/spotify-downloader.git
				synced 2025-10-29 18:00:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from spotdl.authorize import AuthorizeBase
 | |
| from spotdl.authorize.exceptions import SpotifyAuthorizationError
 | |
| 
 | |
| import spotipy
 | |
| import spotipy.oauth2 as oauth2
 | |
| 
 | |
| import logging
 | |
| logger = logging.getLogger(__name__)
 | |
| 
 | |
| # This masterclient is used to keep the last logged-in client
 | |
| # object in memory for for persistence. If credentials aren't
 | |
| # provided when creating further objects, the last authenticated
 | |
| # client object with correct credentials is returned when
 | |
| # `AuthorizeSpotify().authorize()` is called.
 | |
| masterclient = None
 | |
| 
 | |
| class AuthorizeSpotify(spotipy.Spotify):
 | |
|     def __init__(self, client_id=None, client_secret=None):
 | |
|         global masterclient
 | |
| 
 | |
|         credentials_provided = client_id is not None \
 | |
|                            and client_secret is not None
 | |
|         valid_input = credentials_provided or masterclient is not None
 | |
| 
 | |
|         if not valid_input:
 | |
|             raise SpotifyAuthorizationError(
 | |
|                 "You must pass in client_id and client_secret to this method "
 | |
|                 "when authenticating for the first time."
 | |
|             )
 | |
| 
 | |
|         if masterclient:
 | |
|             logger.debug("Reading cached master Spotify credentials.")
 | |
|             # Use cached client instead of authorizing again
 | |
|             # and thus wasting time.
 | |
|             self.__dict__.update(masterclient.__dict__)
 | |
|         else:
 | |
|             logger.debug("Setting master Spotify credentials.")
 | |
|             credential_manager = oauth2.SpotifyClientCredentials(
 | |
|                 client_id=client_id,
 | |
|                 client_secret=client_secret
 | |
|             )
 | |
|             super().__init__(client_credentials_manager=credential_manager)
 | |
|             # Cache current client
 | |
|             masterclient = self
 | |
| 
 |