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