mirror of
				https://github.com/KevinMidboe/spotify-downloader.git
				synced 2025-10-29 18:00:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from abc import ABC
 | |
| from abc import abstractmethod
 | |
| 
 | |
| class StreamsBase(ABC):
 | |
|     @abstractmethod
 | |
|     def __init__(self, streams):
 | |
|         """
 | |
|         This method must parse audio streams into a list of
 | |
|         dictionaries with the keys:
 | |
|         "bitrate", "download_url", "encoding", "filesize".
 | |
| 
 | |
|         The list should typically be sorted in descending order
 | |
|         based on the audio stream's bitrate.
 | |
| 
 | |
|         This sorted list must be assigned to `self.all`.
 | |
|         """
 | |
|         self.all = streams
 | |
| 
 | |
|     def getbest(self):
 | |
|         """
 | |
|         This method must return the audio stream with the
 | |
|         highest bitrate.
 | |
|         """
 | |
|         return self.all[0]
 | |
| 
 | |
|     def getworst(self):
 | |
|         """
 | |
|         This method must return the audio stream with the
 | |
|         lowest bitrate.
 | |
|         """
 | |
|         return self.all[-1]
 | |
| 
 | |
| 
 | |
| class ProviderBase(ABC):
 | |
|     def set_credentials(self, client_id, client_secret):
 | |
|         """
 | |
|         This method may or not be used depending on
 | |
|         whether the metadata provider requires authentication
 | |
|         or not.
 | |
|         """
 | |
|         pass
 | |
| 
 | |
|     @abstractmethod
 | |
|     def from_url(self, url):
 | |
|         """
 | |
|         This method must return track metadata from the
 | |
|         corresponding Spotify URL.
 | |
|         """
 | |
|         pass
 | |
| 
 | |
|     def from_query(self, query):
 | |
|         """
 | |
|         This method must return track metadata from the
 | |
|         corresponding search query.
 | |
|         """
 | |
|         raise NotImplementedError
 | |
| 
 | |
|     @abstractmethod
 | |
|     def metadata_to_standard_form(self, metadata):
 | |
|         """
 | |
|         This method must transform the fetched metadata
 | |
|         into a format consistent with all other metadata
 | |
|         providers, for easy utilization.
 | |
|         """
 | |
|         pass
 | |
| 
 |