mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-10-29 09:50:16 +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
|
|
|