Добавлена возможность задать глобальный timeout для всех запросов
このコミットが含まれているのは:
コミット
348cb14785
|
@ -29,10 +29,9 @@ def gen_request(output_request_filename):
|
|||
code = code.replace(f'self.{method}(', f'await self.{method}(')
|
||||
|
||||
code = code.replace('proxies=self.proxies', 'proxy=self.proxy_url')
|
||||
code = code.replace('timeout=timeout', 'timeout=aiohttp.ClientTimeout(total=timeout)')
|
||||
# undo one specific case
|
||||
code = code.replace(
|
||||
'self.retrieve(url, timeout=aiohttp.ClientTimeout(total=timeout)', 'self.retrieve(url, timeout=timeout'
|
||||
"kwargs['timeout'] = self._timeout",
|
||||
f"kwargs['timeout'] = aiohttp.ClientTimeout(total=self._timeout)\n{' ' * 8}else:\n{' ' * 12}kwargs['timeout'] = aiohttp.ClientTimeout(total=kwargs['timeout'])",
|
||||
)
|
||||
|
||||
# download method
|
||||
|
|
ファイル差分が大きすぎるため省略します
差分を読み込み
ファイル差分が大きすぎるため省略します
差分を読み込み
|
@ -29,11 +29,14 @@ USER_AGENT = 'Yandex-Music-API'
|
|||
HEADERS = {
|
||||
'X-Yandex-Music-Client': 'YandexMusicAndroid/23020251',
|
||||
}
|
||||
DEFAULT_TIMEOUT = 5
|
||||
|
||||
reserved_names = keyword.kwlist + ['client']
|
||||
|
||||
logging.getLogger('urllib3').setLevel(logging.WARNING)
|
||||
|
||||
default_timeout = object()
|
||||
|
||||
|
||||
class Request:
|
||||
"""Вспомогательный класс для yandex_music, представляющий методы для выполнения POST и GET запросов, скачивания
|
||||
|
@ -45,9 +48,12 @@ class Request:
|
|||
proxy_url (:obj:`str`, optional): Прокси.
|
||||
"""
|
||||
|
||||
def __init__(self, client=None, headers=None, proxy_url=None):
|
||||
def __init__(self, client=None, headers=None, proxy_url=None, timeout=default_timeout):
|
||||
self.headers = headers or HEADERS.copy()
|
||||
|
||||
self._timeout = DEFAULT_TIMEOUT
|
||||
self.set_timeout(timeout)
|
||||
|
||||
self.client = self.set_and_return_client(client)
|
||||
|
||||
# aiohttp
|
||||
|
@ -67,6 +73,16 @@ class Request:
|
|||
"""
|
||||
self.headers.update({'Accept-Language': lang})
|
||||
|
||||
def set_timeout(self, timeout: Union[int, float, object] = default_timeout):
|
||||
"""Устанавливает время ожидания для всех запросов.
|
||||
|
||||
Args:
|
||||
timeout (:obj:`int` | :obj:`float`): Время ожидания от сервера.
|
||||
"""
|
||||
self._timeout = timeout
|
||||
if timeout is default_timeout:
|
||||
self._timeout = DEFAULT_TIMEOUT
|
||||
|
||||
def set_authorization(self, token: str) -> None:
|
||||
"""Добавляет заголовок авторизации для каждого запроса.
|
||||
|
||||
|
@ -192,6 +208,9 @@ class Request:
|
|||
|
||||
kwargs['headers']['User-Agent'] = USER_AGENT
|
||||
|
||||
if kwargs['timeout'] is default_timeout:
|
||||
kwargs['timeout'] = self._timeout
|
||||
|
||||
try:
|
||||
resp = requests.request(*args, **kwargs)
|
||||
except requests.Timeout:
|
||||
|
@ -222,7 +241,9 @@ class Request:
|
|||
else:
|
||||
raise NetworkError(f'{message} ({resp.status_code}): {resp.content}')
|
||||
|
||||
def get(self, url: str, params: dict = None, timeout: Union[int, float] = 5, *args, **kwargs) -> Union[dict, str]:
|
||||
def get(
|
||||
self, url: str, params: dict = None, timeout: Union[int, float] = default_timeout, *args, **kwargs
|
||||
) -> Union[dict, str]:
|
||||
"""Отправка GET запроса.
|
||||
|
||||
Args:
|
||||
|
@ -245,7 +266,7 @@ class Request:
|
|||
|
||||
return self._parse(result).get_result()
|
||||
|
||||
def post(self, url, data=None, timeout=5, *args, **kwargs) -> Union[dict, str]:
|
||||
def post(self, url, data=None, timeout=default_timeout, *args, **kwargs) -> Union[dict, str]:
|
||||
"""Отправка POST запроса.
|
||||
|
||||
Args:
|
||||
|
@ -268,7 +289,7 @@ class Request:
|
|||
|
||||
return self._parse(result).get_result()
|
||||
|
||||
def retrieve(self, url, timeout=5, *args, **kwargs) -> bytes:
|
||||
def retrieve(self, url, timeout=default_timeout, *args, **kwargs) -> bytes:
|
||||
"""Отправка GET запроса и получение содержимого без обработки (парсинга).
|
||||
|
||||
Args:
|
||||
|
@ -286,7 +307,7 @@ class Request:
|
|||
"""
|
||||
return self._request_wrapper('GET', url, proxies=self.proxies, timeout=timeout, *args, **kwargs)
|
||||
|
||||
def download(self, url, filename, timeout=5, *args, **kwargs) -> None:
|
||||
def download(self, url, filename, timeout=default_timeout, *args, **kwargs) -> None:
|
||||
"""Отправка запроса на получение содержимого и его запись в файл.
|
||||
|
||||
Args:
|
||||
|
|
|
@ -35,11 +35,14 @@ USER_AGENT = 'Yandex-Music-API'
|
|||
HEADERS = {
|
||||
'X-Yandex-Music-Client': 'YandexMusicAndroid/23020251',
|
||||
}
|
||||
DEFAULT_TIMEOUT = 5
|
||||
|
||||
reserved_names = keyword.kwlist + ['client']
|
||||
|
||||
logging.getLogger('urllib3').setLevel(logging.WARNING)
|
||||
|
||||
default_timeout = object()
|
||||
|
||||
|
||||
class Request:
|
||||
"""Вспомогательный класс для yandex_music, представляющий методы для выполнения POST и GET запросов, скачивания
|
||||
|
@ -51,9 +54,12 @@ class Request:
|
|||
proxy_url (:obj:`str`, optional): Прокси.
|
||||
"""
|
||||
|
||||
def __init__(self, client=None, headers=None, proxy_url=None):
|
||||
def __init__(self, client=None, headers=None, proxy_url=None, timeout=default_timeout):
|
||||
self.headers = headers or HEADERS.copy()
|
||||
|
||||
self._timeout = DEFAULT_TIMEOUT
|
||||
self.set_timeout(timeout)
|
||||
|
||||
self.client = self.set_and_return_client(client)
|
||||
|
||||
# aiohttp
|
||||
|
@ -73,6 +79,16 @@ class Request:
|
|||
"""
|
||||
self.headers.update({'Accept-Language': lang})
|
||||
|
||||
def set_timeout(self, timeout: Union[int, float, object] = default_timeout):
|
||||
"""Устанавливает время ожидания для всех запросов.
|
||||
|
||||
Args:
|
||||
timeout (:obj:`int` | :obj:`float`): Время ожидания от сервера.
|
||||
"""
|
||||
self._timeout = timeout
|
||||
if timeout is default_timeout:
|
||||
self._timeout = DEFAULT_TIMEOUT
|
||||
|
||||
def set_authorization(self, token: str) -> None:
|
||||
"""Добавляет заголовок авторизации для каждого запроса.
|
||||
|
||||
|
@ -198,6 +214,11 @@ class Request:
|
|||
|
||||
kwargs['headers']['User-Agent'] = USER_AGENT
|
||||
|
||||
if kwargs['timeout'] is default_timeout:
|
||||
kwargs['timeout'] = aiohttp.ClientTimeout(total=self._timeout)
|
||||
else:
|
||||
kwargs['timeout'] = aiohttp.ClientTimeout(total=kwargs['timeout'])
|
||||
|
||||
try:
|
||||
async with aiohttp.request(*args, **kwargs) as _resp:
|
||||
resp = _resp
|
||||
|
@ -231,7 +252,7 @@ class Request:
|
|||
raise NetworkError(f'{message} ({resp.status}): {content}')
|
||||
|
||||
async def get(
|
||||
self, url: str, params: dict = None, timeout: Union[int, float] = 5, *args, **kwargs
|
||||
self, url: str, params: dict = None, timeout: Union[int, float] = default_timeout, *args, **kwargs
|
||||
) -> Union[dict, str]:
|
||||
"""Отправка GET запроса.
|
||||
|
||||
|
@ -250,19 +271,12 @@ class Request:
|
|||
:class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки.
|
||||
"""
|
||||
result = await self._request_wrapper(
|
||||
'GET',
|
||||
url,
|
||||
params=params,
|
||||
headers=self.headers,
|
||||
proxy=self.proxy_url,
|
||||
timeout=aiohttp.ClientTimeout(total=timeout),
|
||||
*args,
|
||||
**kwargs,
|
||||
'GET', url, params=params, headers=self.headers, proxy=self.proxy_url, timeout=timeout, *args, **kwargs
|
||||
)
|
||||
|
||||
return self._parse(result).get_result()
|
||||
|
||||
async def post(self, url, data=None, timeout=5, *args, **kwargs) -> Union[dict, str]:
|
||||
async def post(self, url, data=None, timeout=default_timeout, *args, **kwargs) -> Union[dict, str]:
|
||||
"""Отправка POST запроса.
|
||||
|
||||
Args:
|
||||
|
@ -280,19 +294,12 @@ class Request:
|
|||
:class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки.
|
||||
"""
|
||||
result = await self._request_wrapper(
|
||||
'POST',
|
||||
url,
|
||||
headers=self.headers,
|
||||
proxy=self.proxy_url,
|
||||
data=data,
|
||||
timeout=aiohttp.ClientTimeout(total=timeout),
|
||||
*args,
|
||||
**kwargs,
|
||||
'POST', url, headers=self.headers, proxy=self.proxy_url, data=data, timeout=timeout, *args, **kwargs
|
||||
)
|
||||
|
||||
return self._parse(result).get_result()
|
||||
|
||||
async def retrieve(self, url, timeout=5, *args, **kwargs) -> bytes:
|
||||
async def retrieve(self, url, timeout=default_timeout, *args, **kwargs) -> bytes:
|
||||
"""Отправка GET запроса и получение содержимого без обработки (парсинга).
|
||||
|
||||
Args:
|
||||
|
@ -308,11 +315,9 @@ class Request:
|
|||
Raises:
|
||||
:class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки.
|
||||
"""
|
||||
return await self._request_wrapper(
|
||||
'GET', url, proxy=self.proxy_url, timeout=aiohttp.ClientTimeout(total=timeout), *args, **kwargs
|
||||
)
|
||||
return await self._request_wrapper('GET', url, proxy=self.proxy_url, timeout=timeout, *args, **kwargs)
|
||||
|
||||
async def download(self, url, filename, timeout=5, *args, **kwargs) -> None:
|
||||
async def download(self, url, filename, timeout=default_timeout, *args, **kwargs) -> None:
|
||||
"""Отправка запроса на получение содержимого и его запись в файл.
|
||||
|
||||
Args:
|
||||
|
|
読み込み中…
新しいイシューから参照