mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-15 07:34:48 -04:00
Implement rate limiting #366
This commit is contained in:
parent
ef34756046
commit
31056e8250
3 changed files with 31 additions and 15 deletions
|
@ -185,21 +185,28 @@ class Config:
|
|||
:param source:
|
||||
:type source: str
|
||||
"""
|
||||
creds = None
|
||||
if source == "qobuz":
|
||||
return self.qobuz_creds
|
||||
creds = self.qobuz_creds
|
||||
if source == "tidal":
|
||||
return self.tidal_creds
|
||||
creds = self.tidal_creds
|
||||
if source == "deezer":
|
||||
return {"arl": self.file["deezer"]["arl"]}
|
||||
creds = {"arl": self.file["deezer"]["arl"]}
|
||||
if source == "soundcloud":
|
||||
soundcloud = self.file["soundcloud"]
|
||||
return {
|
||||
creds = {
|
||||
"client_id": soundcloud["client_id"],
|
||||
"app_version": soundcloud["app_version"],
|
||||
}
|
||||
|
||||
if creds is None:
|
||||
raise InvalidSourceError(source)
|
||||
|
||||
rpm = self.file["downloads"]["concurrency"]["requests_per_minute"]
|
||||
if rpm > 0:
|
||||
creds.update({"requests_per_min": rpm})
|
||||
return creds
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""Return a string representation of the config."""
|
||||
return f"Config({pformat(self.session)})"
|
||||
|
|
|
@ -13,6 +13,9 @@ enabled = true
|
|||
# If you have very fast internet, you will benefit from a higher value,
|
||||
# A value that is too high for your bandwidth may cause slowdowns
|
||||
max_connections = 3
|
||||
# Max number of API requests to handle per minute
|
||||
# Set to -1 for no limit
|
||||
requests_per_minute = -1
|
||||
|
||||
[qobuz]
|
||||
# 1: 320kbps MP3, 2: 16/44.1, 3: 24/<=96, 4: 24/>=96
|
||||
|
@ -174,4 +177,4 @@ progress_bar = "dainty"
|
|||
|
||||
[misc]
|
||||
# Metadata to identify this config file. Do not change.
|
||||
version = "1.9.6"
|
||||
version = "1.9.8"
|
||||
|
|
|
@ -128,14 +128,16 @@ class QobuzClient(Client):
|
|||
return
|
||||
|
||||
if not kwargs.get("app_id") or not kwargs.get("secrets"):
|
||||
self._get_app_id_and_secrets() # can be async
|
||||
# sets session
|
||||
self._get_app_id_and_secrets(kwargs.get("requests_per_min")) # can be async
|
||||
else:
|
||||
self.app_id, self.secrets = (
|
||||
str(kwargs["app_id"]),
|
||||
kwargs["secrets"],
|
||||
)
|
||||
self.session = SRSession(
|
||||
headers={"User-Agent": AGENT, "X-App-Id": self.app_id}
|
||||
headers={"User-Agent": AGENT, "X-App-Id": self.app_id},
|
||||
requests_per_min=kwargs.get("requests_per_min"),
|
||||
)
|
||||
self._validate_secrets()
|
||||
|
||||
|
@ -213,7 +215,7 @@ class QobuzClient(Client):
|
|||
|
||||
# ---------- Private Methods ---------------
|
||||
|
||||
def _get_app_id_and_secrets(self):
|
||||
def _get_app_id_and_secrets(self, rpm):
|
||||
if not hasattr(self, "app_id") or not hasattr(self, "secrets"):
|
||||
spoofer = Spoofer()
|
||||
self.app_id, self.secrets = (
|
||||
|
@ -224,7 +226,8 @@ class QobuzClient(Client):
|
|||
if not hasattr(self, "sec"):
|
||||
if not hasattr(self, "session"):
|
||||
self.session = SRSession(
|
||||
headers={"User-Agent": AGENT, "X-App-Id": self.app_id}
|
||||
headers={"User-Agent": AGENT, "X-App-Id": self.app_id},
|
||||
requests_per_min=rpm,
|
||||
)
|
||||
self._validate_secrets()
|
||||
|
||||
|
@ -736,8 +739,6 @@ class TidalClient(Client):
|
|||
self.refresh_token = None
|
||||
self.expiry = None
|
||||
|
||||
self.session = SRSession()
|
||||
|
||||
def login(
|
||||
self,
|
||||
user_id=None,
|
||||
|
@ -745,6 +746,7 @@ class TidalClient(Client):
|
|||
access_token=None,
|
||||
token_expiry=None,
|
||||
refresh_token=None,
|
||||
**kwargs,
|
||||
):
|
||||
"""Login to Tidal using the browser.
|
||||
|
||||
|
@ -757,6 +759,9 @@ class TidalClient(Client):
|
|||
:param token_expiry:
|
||||
:param refresh_token:
|
||||
"""
|
||||
self.session = SRSession(
|
||||
requests_per_min=kwargs.get("requests_per_min"),
|
||||
)
|
||||
if access_token:
|
||||
self.token_expiry = float(token_expiry)
|
||||
self.refresh_token = refresh_token
|
||||
|
@ -1110,13 +1115,14 @@ class SoundCloudClient(Client):
|
|||
|
||||
def __init__(self):
|
||||
"""Create a SoundCloudClient."""
|
||||
|
||||
def login(self, **kwargs):
|
||||
self.session = SRSession(
|
||||
headers={
|
||||
"User-Agent": AGENT,
|
||||
}
|
||||
},
|
||||
requests_per_min=kwargs.get("requests_per_min"),
|
||||
)
|
||||
|
||||
def login(self, **kwargs):
|
||||
self.client_id = kwargs.get("client_id")
|
||||
self.app_version = kwargs.get("app_version")
|
||||
logger.debug("client_id: %s, app_version: %s", self.client_id, self.app_version)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue