From d0d58c3ff454ca82c9b9fa25c661a11e8bcf0d06 Mon Sep 17 00:00:00 2001 From: "Ilya (Marshal)" Date: Mon, 31 Oct 2022 14:57:28 +0100 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?timeout=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D1=81=D0=B5=D1=85=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20close=20#362?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate_async_version.py | 5 +- yandex_music/client.py | 463 +++++++--------------------- yandex_music/client_async.py | 459 +++++++-------------------- yandex_music/utils/request.py | 31 +- yandex_music/utils/request_async.py | 53 ++-- 5 files changed, 295 insertions(+), 716 deletions(-) diff --git a/generate_async_version.py b/generate_async_version.py index 68f6b57..95b9b0e 100644 --- a/generate_async_version.py +++ b/generate_async_version.py @@ -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 diff --git a/yandex_music/client.py b/yandex_music/client.py index 2f7027d..ace9d53 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -155,12 +155,10 @@ class Client(YandexMusicObject): return self @log - def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: + def account_status(self, *args, **kwargs) -> Optional[Status]: """Получение статуса аккаунта. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -172,17 +170,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/account/status' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Status.de_json(result, self) @log - def account_settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[UserSettings]: + def account_settings(self, *args, **kwargs) -> Optional[UserSettings]: """Получение настроек текущего пользователя. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -195,7 +191,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/account/settings' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return UserSettings.de_json(result, self) @@ -205,7 +201,6 @@ class Client(YandexMusicObject): param: str = None, value: Union[str, int, bool] = None, data: Dict[str, Union[str, int, bool]] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[UserSettings]: @@ -218,8 +213,6 @@ class Client(YandexMusicObject): param (:obj:`str`): Название параметра для изменения. value (:obj:`str` | :obj:`int` | :obj:`bool`): Значение параметра. data (:obj:`dict`): Словарь параметров и значений для множественного изменения. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -236,17 +229,15 @@ class Client(YandexMusicObject): # TODO (MarshalX) значения в data типа bool должны быть приведены к str при работе с async клиентом. - result = self._request.post(url, data=data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, data=data, *args, **kwargs) return UserSettings.de_json(result, self) @log - def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]: + def settings(self, *args, **kwargs) -> Optional[Settings]: """Получение предложений по покупке. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -259,17 +250,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/settings' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Settings.de_json(result, self) @log - def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[PermissionAlerts]: + def permission_alerts(self, *args, **kwargs) -> Optional[PermissionAlerts]: """Получение оповещений. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -281,17 +270,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/permission-alerts' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return PermissionAlerts.de_json(result, self) @log - def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Experiments]: + def account_experiments(self, *args, **kwargs) -> Optional[Experiments]: """Получение значений экспериментальных функций аккаунта. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -303,21 +290,17 @@ class Client(YandexMusicObject): url = f'{self.base_url}/account/experiments' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Experiments.de_json(result, self) @log - def consume_promo_code( - self, code: str, language: str = 'en', timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[PromoCodeStatus]: + def consume_promo_code(self, code: str, language: str = 'en', *args, **kwargs) -> Optional[PromoCodeStatus]: """Активация промо-кода. Args: code (:obj:`str`): Промо-код. language (:obj:`str`, optional): Язык ответа API в ISO 639-1. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -329,17 +312,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/account/consume-promo-code' - result = self._request.post(url, {'code': code, 'language': language}, timeout=timeout, *args, **kwargs) + result = self._request.post(url, {'code': code, 'language': language}, *args, **kwargs) return PromoCodeStatus.de_json(result, self) @log - def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Feed]: + def feed(self, *args, **kwargs) -> Optional[Feed]: """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -351,22 +332,20 @@ class Client(YandexMusicObject): url = f'{self.base_url}/feed' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Feed.de_json(result, self) @log - def feed_wizard_is_passed(self, timeout: Union[int, float] = None, *args, **kwargs) -> bool: + def feed_wizard_is_passed(self, *args, **kwargs) -> bool: url = f'{self.base_url}/feed/wizard/is-passed' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return result.get('is_wizard_passed') or False @log - def landing( - self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Landing]: + def landing(self, blocks: Union[str, List[str]], *args, **kwargs) -> Optional[Landing]: """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. Note: @@ -375,8 +354,6 @@ class Client(YandexMusicObject): Args: blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -388,14 +365,13 @@ class Client(YandexMusicObject): url = f'{self.base_url}/landing3' - result = self._request.get( - url, {'blocks': blocks, 'eitherUserId': '10254713668400548221'}, timeout=timeout, *args, **kwargs - ) + result = self._request.get(url, {'blocks': blocks, 'eitherUserId': '10254713668400548221'}, *args, **kwargs) + # TODO что тут делает константа с моим User ID return Landing.de_json(result, self) @log - def chart(self, chart_option: str = '', timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ChartInfo]: + def chart(self, chart_option: str = '', *args, **kwargs) -> Optional[ChartInfo]: """Получение чарта. Note: @@ -404,8 +380,6 @@ class Client(YandexMusicObject): Args: chart_option (:obj:`str` optional): Параметры чарта. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -420,17 +394,15 @@ class Client(YandexMusicObject): if chart_option: url = f'{url}/{chart_option}' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return ChartInfo.de_json(result, self) @log - def new_releases(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + def new_releases(self, *args, **kwargs) -> Optional[LandingList]: """Получение полного списка всех новых релизов (альбомов). Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -442,17 +414,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/landing3/new-releases' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - def new_playlists(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + def new_playlists(self, *args, **kwargs) -> Optional[LandingList]: """Получение полного списка всех новых плейлистов. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -464,17 +434,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/landing3/new-playlists' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - def podcasts(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + def podcasts(self, *args, **kwargs) -> Optional[LandingList]: """Получение подкастов с лендинга. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -486,17 +454,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/landing3/podcasts' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]: + def genres(self, *args, **kwargs) -> List[Genre]: """Получение жанров музыки. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -508,12 +474,12 @@ class Client(YandexMusicObject): url = f'{self.base_url}/genres' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Genre.de_list(result, self) @log - def tags(self, tag_id: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[TagResult]: + def tags(self, tag_id: str, *args, **kwargs) -> Optional[TagResult]: """Получение тега (подборки). Note: @@ -524,8 +490,6 @@ class Client(YandexMusicObject): Args: tag_id (:obj:`str`): Уникальный идентификатор тега. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -537,7 +501,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/tags/{tag_id}/playlist-ids' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return TagResult.de_json(result, self) @@ -546,7 +510,6 @@ class Client(YandexMusicObject): self, track_id: Union[str, int], get_direct_links: bool = False, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[DownloadInfo]: @@ -555,8 +518,6 @@ class Client(YandexMusicObject): Args: track_id (:obj:`str` | :obj:`list` из :obj:`str`): Уникальный идентификатор трека или треков. get_direct_links (:obj:`bool`, optional): Получить ли при вызове метода прямую ссылку на загрузку. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -568,20 +529,16 @@ class Client(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/download-info' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return DownloadInfo.de_list(result, self, get_direct_links) @log - def track_supplement( - self, track_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Supplement]: + def track_supplement(self, track_id: Union[str, int], *args, **kwargs) -> Optional[Supplement]: """Получение дополнительной информации о треке. Args: track_id (:obj:`str`): Уникальный идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -593,20 +550,16 @@ class Client(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/supplement' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Supplement.de_json(result, self) @log - def tracks_similar( - self, track_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[SimilarTracks]: + def tracks_similar(self, track_id: Union[str, int], *args, **kwargs) -> Optional[SimilarTracks]: """Получение похожих треков. Args: track_id (:obj:`str`): Уникальный идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -618,7 +571,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/similar' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return SimilarTracks.de_json(result, self) @@ -637,7 +590,6 @@ class Client(YandexMusicObject): total_played_seconds: int = 0, end_position_seconds: int = 0, client_now: str = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -656,8 +608,6 @@ class Client(YandexMusicObject): total_played_seconds (:obj:`int`, optional): Сколько было всего воспроизведено трека в секундах. end_position_seconds (:obj:`int`, optional): Окончательное значение воспроизведенных секунд. client_now (:obj:`str`, optional): Текущая дата и время клиента в ISO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -687,20 +637,16 @@ class Client(YandexMusicObject): 'client-now': client_now or f'{datetime.now().isoformat()}Z', } - result = self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, data, *args, **kwargs) return result == 'ok' @log - def albums_with_tracks( - self, album_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Album]: + def albums_with_tracks(self, album_id: Union[str, int], *args, **kwargs) -> Optional[Album]: """Получение альбома по его уникальному идентификатору вместе с треками. Args: album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -712,7 +658,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/albums/{album_id}/with-tracks' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Album.de_json(result, self) @@ -724,7 +670,6 @@ class Client(YandexMusicObject): type_: str = 'all', page: int = 0, playlist_in_best: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Search]: @@ -743,8 +688,6 @@ class Client(YandexMusicObject): type_ (:obj:`str`): Среди какого типа искать (трек, плейлист, альбом, исполнитель, пользователь, подкаст). page (:obj:`int`): Номер страницы. playlist_in_best (:obj:`bool`): Выдавать ли плейлисты лучшим вариантом поиска. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -764,7 +707,7 @@ class Client(YandexMusicObject): 'playlist-in-best': str(playlist_in_best), } - result = self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params, *args, **kwargs) if isinstance(result, str): raise BadRequestError(result) @@ -772,13 +715,11 @@ class Client(YandexMusicObject): return Search.de_json(result, self) @log - def search_suggest(self, part: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Suggestions]: + def search_suggest(self, part: str, *args, **kwargs) -> Optional[Suggestions]: """Получение подсказок по введенной части поискового запроса. Args: part (:obj:`str`): Часть поискового запроса. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -790,14 +731,12 @@ class Client(YandexMusicObject): url = f'{self.base_url}/search/suggest' - result = self._request.get(url, {'part': part}, timeout=timeout, *args, **kwargs) + result = self._request.get(url, {'part': part}, *args, **kwargs) return Suggestions.de_json(result, self) @log - def users_settings( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[UserSettings]: + def users_settings(self, user_id: Union[str, int] = None, *args, **kwargs) -> Optional[UserSettings]: """Получение настроек пользователя. Note: @@ -806,8 +745,6 @@ class Client(YandexMusicObject): Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя чьи настройки хотим получить. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -822,7 +759,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/settings' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return UserSettings.de_json(result.get('user_settings'), self) @@ -831,7 +768,6 @@ class Client(YandexMusicObject): self, kind: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Union[Playlist, List[Playlist]]: @@ -844,8 +780,6 @@ class Client(YandexMusicObject): kind (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста или их список. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -864,26 +798,22 @@ class Client(YandexMusicObject): data = {'kinds': kind} - result = self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, data, *args, **kwargs) return Playlist.de_list(result, self) else: url = f'{self.base_url}/users/{user_id}/playlists/{kind}' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Playlist.de_json(result, self) @log - def users_playlists_recommendations( - self, kind: Union[str, int], user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ): + def users_playlists_recommendations(self, kind: Union[str, int], user_id: Union[str, int] = None, *args, **kwargs): """Получение рекомендаций для плейлиста. Args: kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. user_id (:obj:`str` | :obj:`int`): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -897,7 +827,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/recommendations' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return PlaylistRecommendations.de_json(result, self) @@ -907,7 +837,6 @@ class Client(YandexMusicObject): title: str, visibility: str = 'public', user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -917,8 +846,6 @@ class Client(YandexMusicObject): title (:obj:`str`): Название. visibility (:obj:`str`, optional): Модификатор доступа. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -935,21 +862,17 @@ class Client(YandexMusicObject): data = {'title': title, 'visibility': visibility} - result = self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, data, *args, **kwargs) return Playlist.de_json(result, self) @log - def users_playlists_delete( - self, kind: Union[str, int], user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> bool: + def users_playlists_delete(self, kind: Union[str, int], user_id: Union[str, int] = None, *args, **kwargs) -> bool: """Удаление плейлиста. Args: kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -964,7 +887,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/delete' - result = self._request.post(url, timeout=timeout, *args, **kwargs) + result = self._request.post(url, *args, **kwargs) return result == 'ok' @@ -974,7 +897,6 @@ class Client(YandexMusicObject): kind: Union[str, int], name: str, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -984,8 +906,6 @@ class Client(YandexMusicObject): kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. name (:obj:`str`): Новое название. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1000,7 +920,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/name' - result = self._request.post(url, {'value': name}, timeout=timeout, *args, **kwargs) + result = self._request.post(url, {'value': name}, *args, **kwargs) return Playlist.de_json(result, self) @@ -1010,7 +930,6 @@ class Client(YandexMusicObject): kind: Union[str, int], visibility: str, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1023,8 +942,6 @@ class Client(YandexMusicObject): kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. visibility (:obj:`str`): Новое название. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1039,7 +956,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/visibility' - result = self._request.post(url, {'value': visibility}, timeout=timeout, *args, **kwargs) + result = self._request.post(url, {'value': visibility}, *args, **kwargs) return Playlist.de_json(result, self) @@ -1050,7 +967,6 @@ class Client(YandexMusicObject): diff: str, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1066,8 +982,6 @@ class Client(YandexMusicObject): revision (:obj:`int`): TODO. diff (:obj:`str`): JSON представления отличий старого и нового плейлиста. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1084,7 +998,7 @@ class Client(YandexMusicObject): data = {'kind': kind, 'revision': revision, 'diff': diff} - result = self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, data, *args, **kwargs) return Playlist.de_json(result, self) @@ -1097,7 +1011,6 @@ class Client(YandexMusicObject): at: int = 0, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1113,8 +1026,6 @@ class Client(YandexMusicObject): at (:obj:`int`): Индекс для вставки. revision (:obj:`int`): TODO. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1129,7 +1040,7 @@ class Client(YandexMusicObject): diff = Difference().add_insert(at, {'id': track_id, 'album_id': album_id}) - return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) + return self.users_playlists_change(kind, diff.to_json(), revision, user_id, *args, **kwargs) @log def users_playlists_delete_track( @@ -1139,7 +1050,6 @@ class Client(YandexMusicObject): to: int, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1154,8 +1064,6 @@ class Client(YandexMusicObject): to (:obj:`int`): По какой индекс. revision (:obj:`int`): TODO. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1170,18 +1078,16 @@ class Client(YandexMusicObject): diff = Difference().add_delete(from_, to) - return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) + return self.users_playlists_change(kind, diff.to_json(), revision, user_id, *args, **kwargs) @log - def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: + def rotor_account_status(self, *args, **kwargs) -> Optional[Status]: """Получение статуса пользователя с дополнителньыми полями. Note: Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1194,17 +1100,15 @@ class Client(YandexMusicObject): url = f'{self.base_url}/rotor/account/status' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Status.de_json(result, self) @log - def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Dashboard]: + def rotor_stations_dashboard(self, *args, **kwargs) -> Optional[Dashboard]: """Получение рекомендованных станций текущего пользователя. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1216,14 +1120,12 @@ class Client(YandexMusicObject): url = f'{self.base_url}/rotor/stations/dashboard' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Dashboard.de_json(result, self) @log - def rotor_stations_list( - self, language: str = 'ru', timeout: Union[int, float] = None, *args, **kwargs - ) -> List[StationResult]: + def rotor_stations_list(self, language: str = 'ru', *args, **kwargs) -> List[StationResult]: """Получение всех радиостанций с настройками пользователя. Note: @@ -1232,8 +1134,6 @@ class Client(YandexMusicObject): Args: language (:obj:`str`): Язык, на котором будет информация о станциях. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1245,7 +1145,9 @@ class Client(YandexMusicObject): url = f'{self.base_url}/rotor/stations/list' - result = self._request.get(url, {'language': language}, timeout=timeout, *args, **kwargs) + # TODO (MarshalX) почему тут константный 'ru' когда есть поддержка выбора языка клиентом + + result = self._request.get(url, {'language': language}, *args, **kwargs) return StationResult.de_list(result, self) @@ -1259,7 +1161,6 @@ class Client(YandexMusicObject): batch_id: str = None, total_played_seconds: Union[int, float] = None, track_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1283,8 +1184,6 @@ class Client(YandexMusicObject): total_played_seconds (:obj:`int` |:obj:`float`, optional): Сколько было проиграно секунд трека перед действием. track_id (:obj:`int` | :obj:`str`, optional): Уникальной идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1314,7 +1213,7 @@ class Client(YandexMusicObject): if total_played_seconds: data.update({'totalPlayedSeconds': total_played_seconds}) - result = self._request.post(url, params=params, json=data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, params=params, json=data, *args, **kwargs) return result == 'ok' @@ -1325,7 +1224,6 @@ class Client(YandexMusicObject): from_: str, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1340,7 +1238,7 @@ class Client(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return self.rotor_station_feedback( - station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id, timeout=timeout, *args, **kwargs + station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id, *args, **kwargs ) @log @@ -1350,7 +1248,6 @@ class Client(YandexMusicObject): track_id: Union[str, int], batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1365,7 +1262,7 @@ class Client(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return self.rotor_station_feedback( - station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, timeout=timeout, *args, **kwargs + station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, *args, **kwargs ) @log @@ -1376,7 +1273,6 @@ class Client(YandexMusicObject): total_played_seconds: float, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1398,7 +1294,6 @@ class Client(YandexMusicObject): track_id=track_id, total_played_seconds=total_played_seconds, batch_id=batch_id, - timeout=timeout, *args, **kwargs, ) @@ -1411,7 +1306,6 @@ class Client(YandexMusicObject): total_played_seconds: float, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1433,21 +1327,16 @@ class Client(YandexMusicObject): track_id=track_id, total_played_seconds=total_played_seconds, batch_id=batch_id, - timeout=timeout, *args, **kwargs, ) @log - def rotor_station_info( - self, station: str, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[StationResult]: + def rotor_station_info(self, station: str, *args, **kwargs) -> List[StationResult]: """Получение информации о станции и пользовательских настроек на неё. Args: station (:obj:`str`): Станция. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1459,7 +1348,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/rotor/station/{station}/info' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return StationResult.de_list(result, self) @@ -1469,9 +1358,8 @@ class Client(YandexMusicObject): station: str, mood_energy: str, diversity: str, - language: str = 'not-russian', + language: str = 'not-russian', # TODO (MarshalX) почему не any type_: str = 'rotor', - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1494,8 +1382,6 @@ class Client(YandexMusicObject): diversity (:obj:`str`): Треки. language (:obj:`str`): Язык. type_ (:obj:`str`): Тип. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1512,7 +1398,7 @@ class Client(YandexMusicObject): if language: data.update({'language': language}) - result = self._request.post(url, json=data, timeout=timeout, *args, **kwargs) + result = self._request.post(url, json=data, *args, **kwargs) return result == 'ok' @@ -1522,7 +1408,6 @@ class Client(YandexMusicObject): station: str, settings2: bool = True, queue: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[StationTracksResult]: @@ -1547,8 +1432,6 @@ class Client(YandexMusicObject): station (:obj:`str`): Станция. settings2 (:obj:`bool`, optional): Использовать ли второй набор настроек. queue (:obj:`str` | :obj:`int` , optional): Уникальной идентификатор трека, который только что был. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1567,20 +1450,16 @@ class Client(YandexMusicObject): if queue: params = {'queue': queue} - result = self._request.get(url, params=params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params=params, *args, **kwargs) return StationTracksResult.de_json(result, self) @log - def artists_brief_info( - self, artist_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[BriefInfo]: + def artists_brief_info(self, artist_id: Union[str, int], *args, **kwargs) -> Optional[BriefInfo]: """Получение информации об артисте. Args: artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор исполнителя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1591,7 +1470,7 @@ class Client(YandexMusicObject): """ url = f'{self.base_url}/artists/{artist_id}/brief-info' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return BriefInfo.de_json(result, self) @@ -1601,7 +1480,6 @@ class Client(YandexMusicObject): artist_id: Union[str, int], page: int = 0, page_size: int = 20, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ArtistTracks]: @@ -1611,8 +1489,6 @@ class Client(YandexMusicObject): artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор артиста. page (:obj:`int`, optional): Номер страницы. page_size (:obj:`int`, optional): Количество треков на странице. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1626,7 +1502,7 @@ class Client(YandexMusicObject): params = {'page': page, 'page-size': page_size} - result = self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params, *args, **kwargs) return ArtistTracks.de_json(result, self) @@ -1637,7 +1513,6 @@ class Client(YandexMusicObject): page: int = 0, page_size: int = 20, sort_by: str = 'year', - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ArtistAlbums]: @@ -1651,8 +1526,6 @@ class Client(YandexMusicObject): page (:obj:`int`, optional): Номер страницы. page_size (:obj:`int`, optional): Количество альбомов на странице. sort_by (:obj:`str`, optional): Параметр для сортировки. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1666,7 +1539,7 @@ class Client(YandexMusicObject): params = {'sort-by': sort_by, 'page': page, 'page-size': page_size} - result = self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params, *args, **kwargs) return ArtistAlbums.de_json(result, self) @@ -1676,7 +1549,6 @@ class Client(YandexMusicObject): ids: Union[List[Union[str, int]], str, int], remove: bool = False, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1695,8 +1567,6 @@ class Client(YandexMusicObject): remove (:obj:`bool`, optional): Если :obj:`True` то снимает отметку, иначе ставит. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1711,7 +1581,7 @@ class Client(YandexMusicObject): action = 'remove' if remove else 'add-multiple' url = f'{self.base_url}/users/{user_id}/likes/{object_type}s/{action}' - result = self._request.post(url, {f'{object_type}-ids': ids}, timeout=timeout, *args, **kwargs) + result = self._request.post(url, {f'{object_type}-ids': ids}, *args, **kwargs) if object_type == 'track': return 'revision' in result @@ -1723,7 +1593,6 @@ class Client(YandexMusicObject): self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1737,8 +1606,6 @@ class Client(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1747,14 +1614,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs) + return self._like_action('track', track_ids, False, user_id, *args, **kwargs) @log def users_likes_tracks_remove( self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1765,8 +1631,6 @@ class Client(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1775,14 +1639,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs) + return self._like_action('track', track_ids, True, user_id, *args, **kwargs) @log def users_likes_artists_add( self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1793,8 +1656,6 @@ class Client(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1803,14 +1664,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs) + return self._like_action('artist', artist_ids, False, user_id, *args, **kwargs) @log def users_likes_artists_remove( self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1821,8 +1681,6 @@ class Client(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1831,14 +1689,14 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs) + # TODO (Marshal) что за True. Переделать на named argument + return self._like_action('artist', artist_ids, True, user_id, *args, **kwargs) @log def users_likes_playlists_add( self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1853,8 +1711,6 @@ class Client(YandexMusicObject): идентификатор плейлиста или плейлистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1863,14 +1719,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs) + return self._like_action('playlist', playlist_ids, False, user_id, *args, **kwargs) @log def users_likes_playlists_remove( self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1885,8 +1740,6 @@ class Client(YandexMusicObject): идентификатор плейлиста или плейлистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1895,14 +1748,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs) + return self._like_action('playlist', playlist_ids, True, user_id, *args, **kwargs) @log def users_likes_albums_add( self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1913,8 +1765,6 @@ class Client(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1923,14 +1773,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs) + return self._like_action('album', album_ids, False, user_id, *args, **kwargs) @log def users_likes_albums_remove( self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1941,8 +1790,6 @@ class Client(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1951,14 +1798,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs) + return self._like_action('album', album_ids, True, user_id, *args, **kwargs) def _get_list( self, object_type: str, ids: Union[List[Union[str, int]], int, str], params: dict = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Union[Artist, Album, Track, Playlist]]: @@ -1969,8 +1815,6 @@ class Client(YandexMusicObject): ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор объекта или объектов. params (:obj:`dict`, optional): Параметры, которые будут переданы в запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1987,21 +1831,17 @@ class Client(YandexMusicObject): url = f'{self.base_url}/{object_type}s' + ('/list' if object_type == 'playlist' else '') - result = self._request.post(url, params, timeout=timeout, *args, **kwargs) + result = self._request.post(url, params, *args, **kwargs) return de_list[object_type](result, self) @log - def artists( - self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Artist]: + def artists(self, artist_ids: Union[List[Union[str, int]], int, str], *args, **kwargs) -> List[Artist]: """Получение исполнителя/исполнителей. Args: artist_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор исполнителя или исполнителей. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2010,19 +1850,15 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs) + return self._get_list('artist', artist_ids, *args, **kwargs) @log - def albums( - self, album_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Album]: + def albums(self, album_ids: Union[List[Union[str, int]], int, str], *args, **kwargs) -> List[Album]: """Получение альбома/альбомов. Args: album_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор альбома или альбомов. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2031,14 +1867,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_list('album', album_ids, timeout=timeout, *args, **kwargs) + return self._get_list('album', album_ids, *args, **kwargs) @log def tracks( self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Track]: @@ -2048,8 +1883,6 @@ class Client(YandexMusicObject): track_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор трека или треков. with_positions (:obj:`bool`, optional): С позициями TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2058,12 +1891,10 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_list('track', track_ids, {'with-positions': str(with_positions)}, timeout, *args, **kwargs) + return self._get_list('track', track_ids, {'with-positions': str(with_positions)}, *args, **kwargs) @log - def playlists_list( - self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Playlist]: + def playlists_list(self, playlist_ids: Union[List[Union[str, int]], int, str], *args, **kwargs) -> List[Playlist]: """Получение плейлиста/плейлистов. Note: @@ -2073,8 +1904,6 @@ class Client(YandexMusicObject): Args: playlist_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор плейлиста или плейлистов. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2083,12 +1912,10 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs) + return self._get_list('playlist', playlist_ids, *args, **kwargs) @log - def playlists_collective_join( - self, user_id: int, token: str, timeout: Union[int, float] = None, *args, **kwargs - ) -> bool: + def playlists_collective_join(self, user_id: int, token: str, *args, **kwargs) -> bool: """Присоединение к плейлисту как соавтор. Note: @@ -2100,8 +1927,6 @@ class Client(YandexMusicObject): Args: user_id (:obj:`int`): Владелец плейлиста. token (:obj:`str`): Токен для присоединения. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs: Произвольные аргументы (будут переданы в запрос). Returns: @@ -2114,21 +1939,17 @@ class Client(YandexMusicObject): params = {'uid': user_id, 'token': token} - result = self._request.post(url, params=params, timeout=timeout, *args, **kwargs) + result = self._request.post(url, params=params, *args, **kwargs) return result == 'ok' @log - def users_playlists_list( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Playlist]: + def users_playlists_list(self, user_id: Union[str, int] = None, *args, **kwargs) -> List[Playlist]: """Получение списка плейлистов пользователя. Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2142,7 +1963,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/list' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Playlist.de_list(result, self) @@ -2151,7 +1972,6 @@ class Client(YandexMusicObject): object_type: str, user_id: Union[str, int] = None, params: dict = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Union[List[Like], Optional[TracksList]]: @@ -2162,8 +1982,6 @@ class Client(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. params (:obj:`dict`, optional): Параметры, которые будут переданы в запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2177,7 +1995,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/likes/{object_type}s' - result = self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params, *args, **kwargs) if object_type == 'track': return TracksList.de_json(result.get('library'), self) @@ -2189,7 +2007,6 @@ class Client(YandexMusicObject): self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[TracksList]: @@ -2199,8 +2016,6 @@ class Client(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. if_modified_since_revision (:obj:`int`, optional): TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2210,21 +2025,17 @@ class Client(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return self._get_likes( - 'track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout, *args, **kwargs + 'track', user_id, {'if-modified-since-revision': if_modified_since_revision}, *args, **kwargs ) @log - def users_likes_albums( - self, user_id: Union[str, int] = None, rich: bool = True, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Like]: + def users_likes_albums(self, user_id: Union[str, int] = None, rich: bool = True, *args, **kwargs) -> List[Like]: """Получение альбомов с отметкой "Мне нравится". Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. rich (:obj:`bool`, optional): Если False, то приходит укороченная версия. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2233,14 +2044,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_likes('album', user_id, {'rich': str(rich)}, timeout, *args, **kwargs) + return self._get_likes('album', user_id, {'rich': str(rich)}, *args, **kwargs) @log def users_likes_artists( self, user_id: Union[str, int] = None, with_timestamps: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Like]: @@ -2250,8 +2060,6 @@ class Client(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. with_timestamps (:obj:`bool`, optional): С временными метками TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2260,19 +2068,15 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_likes('artist', user_id, {'with-timestamps': str(with_timestamps)}, timeout, *args, **kwargs) + return self._get_likes('artist', user_id, {'with-timestamps': str(with_timestamps)}, *args, **kwargs) @log - def users_likes_playlists( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Like]: + def users_likes_playlists(self, user_id: Union[str, int] = None, *args, **kwargs) -> List[Like]: """Получение плейлистов с отметкой "Мне нравится". Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2281,14 +2085,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs) + return self._get_likes('playlist', user_id, *args, **kwargs) @log def users_dislikes_tracks( self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[TracksList]: @@ -2298,8 +2101,6 @@ class Client(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. if_modified_since_revision (:obj:`bool`, optional): TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2313,9 +2114,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/dislikes/tracks' - result = self._request.get( - url, {'if_modified_since_revision': if_modified_since_revision}, timeout=timeout, *args, **kwargs - ) + result = self._request.get(url, {'if_modified_since_revision': if_modified_since_revision}, *args, **kwargs) return TracksList.de_json(result.get('library'), self) @@ -2324,7 +2123,6 @@ class Client(YandexMusicObject): ids: Union[List[Union[str, int]], str, int], remove: bool = False, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2336,8 +2134,6 @@ class Client(YandexMusicObject): remove (:obj:`bool`, optional): Если :obj:`True`, то снимает отметку, иначе ставит. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2352,7 +2148,7 @@ class Client(YandexMusicObject): action = 'remove' if remove else 'add-multiple' url = f'{self.base_url}/users/{user_id}/dislikes/tracks/{action}' - result = self._request.post(url, {f'track-ids': ids}, timeout=timeout, *args, **kwargs) + result = self._request.post(url, {f'track-ids': ids}, *args, **kwargs) return 'revision' in result @@ -2361,7 +2157,6 @@ class Client(YandexMusicObject): self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2375,8 +2170,6 @@ class Client(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2385,14 +2178,13 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs) + return self._dislike_action(track_ids, False, user_id, *args, **kwargs) @log def users_dislikes_tracks_remove( self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2403,8 +2195,6 @@ class Client(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2413,7 +2203,7 @@ class Client(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs) + return self._dislike_action(track_ids, True, user_id, *args, **kwargs) @log def after_track( @@ -2424,7 +2214,6 @@ class Client(YandexMusicObject): context: str = 'playlist', types: str = 'shot', from_: str = 'mobile-landing-origin-default', - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ShotEvent]: @@ -2449,8 +2238,6 @@ class Client(YandexMusicObject): context (:obj:`str`, optional): Место, откуда было вызвано получение. types (:obj:`str`, optional): Тип того, что вернуть после трека. from_ (:obj:`str`, optional): Место, с которого попали в контекст. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2471,13 +2258,13 @@ class Client(YandexMusicObject): 'types': types, } - result = self._request.get(url, params=params, timeout=timeout, *args, **kwargs) + result = self._request.get(url, params=params, *args, **kwargs) # TODO судя по всему эндпоинт ещё возвращает рекламу после треков для пользователей без подписки. return ShotEvent.de_json(result.get('shot_event'), self) @log - def queues_list(self, device: str = None, timeout: Union[int, float] = None, *args, **kwargs) -> List[QueueItem]: + def queues_list(self, device: str = None, *args, **kwargs) -> List[QueueItem]: """Получение всех очередей треков с разных устройств для синхронизации между ними. Note: @@ -2488,8 +2275,6 @@ class Client(YandexMusicObject): Args: device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2504,18 +2289,16 @@ class Client(YandexMusicObject): url = f'{self.base_url}/queues' self._request.headers['X-Yandex-Music-Device'] = device - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return QueueItem.de_list(result.get('queues'), self) @log - def queue(self, queue_id: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Queue]: + def queue(self, queue_id: str, *args, **kwargs) -> Optional[Queue]: """Получение информации об очереди треков и самих треков в ней. Args: queue_id (:obj:`str`): Уникальный идентификатор очереди. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2526,14 +2309,12 @@ class Client(YandexMusicObject): """ url = f'{self.base_url}/queues/{queue_id}' - result = self._request.get(url, timeout=timeout, *args, **kwargs) + result = self._request.get(url, *args, **kwargs) return Queue.de_json(result, self) @log - def queue_update_position( - self, queue_id: str, current_index: int, device: str = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> bool: + def queue_update_position(self, queue_id: str, current_index: int, device: str = None, *args, **kwargs) -> bool: """Установка текущего индекса проигрываемого трека в очереди треков. Note: @@ -2543,8 +2324,6 @@ class Client(YandexMusicObject): queue_id (:obj:`str`): Уникальный идентификатор очереди. current_index (:obj:`int`): Текущий индекс. device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2560,22 +2339,18 @@ class Client(YandexMusicObject): self._request.headers['X-Yandex-Music-Device'] = device result = self._request.post( - url, {'isInteractive': False}, params={'currentIndex': current_index}, timeout=timeout, *args, **kwargs + url, {'isInteractive': False}, params={'currentIndex': current_index}, *args, **kwargs ) return result.get('status') == 'ok' @log - def queue_create( - self, queue: Union[Queue, str], device: str = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[str]: + def queue_create(self, queue: Union[Queue, str], device: str = None, *args, **kwargs) -> Optional[str]: """Создание новой очереди треков. Args: queue (:obj:`yandex_music.Queue` | :obj:`str`): Объект очереди или JSON строка с этим объектом. device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2593,7 +2368,7 @@ class Client(YandexMusicObject): url = f'{self.base_url}/queues' self._request.headers['X-Yandex-Music-Device'] = device - result = self._request.post(url, queue, timeout=timeout, *args, **kwargs) + result = self._request.post(url, queue, *args, **kwargs) return result.get('id_') diff --git a/yandex_music/client_async.py b/yandex_music/client_async.py index a3daa9c..7d7cc69 100644 --- a/yandex_music/client_async.py +++ b/yandex_music/client_async.py @@ -159,12 +159,10 @@ class ClientAsync(YandexMusicObject): return self @log - async def account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: + async def account_status(self, *args, **kwargs) -> Optional[Status]: """Получение статуса аккаунта. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -176,17 +174,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/account/status' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Status.de_json(result, self) @log - async def account_settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[UserSettings]: + async def account_settings(self, *args, **kwargs) -> Optional[UserSettings]: """Получение настроек текущего пользователя. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -199,7 +195,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/account/settings' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return UserSettings.de_json(result, self) @@ -209,7 +205,6 @@ class ClientAsync(YandexMusicObject): param: str = None, value: Union[str, int, bool] = None, data: Dict[str, Union[str, int, bool]] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[UserSettings]: @@ -222,8 +217,6 @@ class ClientAsync(YandexMusicObject): param (:obj:`str`): Название параметра для изменения. value (:obj:`str` | :obj:`int` | :obj:`bool`): Значение параметра. data (:obj:`dict`): Словарь параметров и значений для множественного изменения. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -240,17 +233,15 @@ class ClientAsync(YandexMusicObject): # TODO (MarshalX) значения в data типа bool должны быть приведены к str при работе с async клиентом. - result = await self._request.post(url, data=data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, data=data, *args, **kwargs) return UserSettings.de_json(result, self) @log - async def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]: + async def settings(self, *args, **kwargs) -> Optional[Settings]: """Получение предложений по покупке. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -263,17 +254,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/settings' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Settings.de_json(result, self) @log - async def permission_alerts(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[PermissionAlerts]: + async def permission_alerts(self, *args, **kwargs) -> Optional[PermissionAlerts]: """Получение оповещений. Нет обязательных параметров. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -285,17 +274,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/permission-alerts' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return PermissionAlerts.de_json(result, self) @log - async def account_experiments(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Experiments]: + async def account_experiments(self, *args, **kwargs) -> Optional[Experiments]: """Получение значений экспериментальных функций аккаунта. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -307,21 +294,17 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/account/experiments' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Experiments.de_json(result, self) @log - async def consume_promo_code( - self, code: str, language: str = 'en', timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[PromoCodeStatus]: + async def consume_promo_code(self, code: str, language: str = 'en', *args, **kwargs) -> Optional[PromoCodeStatus]: """Активация промо-кода. Args: code (:obj:`str`): Промо-код. language (:obj:`str`, optional): Язык ответа API в ISO 639-1. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -333,17 +316,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/account/consume-promo-code' - result = await self._request.post(url, {'code': code, 'language': language}, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, {'code': code, 'language': language}, *args, **kwargs) return PromoCodeStatus.de_json(result, self) @log - async def feed(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Feed]: + async def feed(self, *args, **kwargs) -> Optional[Feed]: """Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -355,22 +336,20 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/feed' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Feed.de_json(result, self) @log - async def feed_wizard_is_passed(self, timeout: Union[int, float] = None, *args, **kwargs) -> bool: + async def feed_wizard_is_passed(self, *args, **kwargs) -> bool: url = f'{self.base_url}/feed/wizard/is-passed' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return result.get('is_wizard_passed') or False @log - async def landing( - self, blocks: Union[str, List[str]], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Landing]: + async def landing(self, blocks: Union[str, List[str]], *args, **kwargs) -> Optional[Landing]: """Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д. Note: @@ -379,8 +358,6 @@ class ClientAsync(YandexMusicObject): Args: blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -393,15 +370,14 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/landing3' result = await self._request.get( - url, {'blocks': blocks, 'eitherUserId': '10254713668400548221'}, timeout=timeout, *args, **kwargs + url, {'blocks': blocks, 'eitherUserId': '10254713668400548221'}, *args, **kwargs ) + # TODO что тут делает константа с моим User ID return Landing.de_json(result, self) @log - async def chart( - self, chart_option: str = '', timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[ChartInfo]: + async def chart(self, chart_option: str = '', *args, **kwargs) -> Optional[ChartInfo]: """Получение чарта. Note: @@ -410,8 +386,6 @@ class ClientAsync(YandexMusicObject): Args: chart_option (:obj:`str` optional): Параметры чарта. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -426,17 +400,15 @@ class ClientAsync(YandexMusicObject): if chart_option: url = f'{url}/{chart_option}' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return ChartInfo.de_json(result, self) @log - async def new_releases(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + async def new_releases(self, *args, **kwargs) -> Optional[LandingList]: """Получение полного списка всех новых релизов (альбомов). Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -448,17 +420,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/landing3/new-releases' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - async def new_playlists(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + async def new_playlists(self, *args, **kwargs) -> Optional[LandingList]: """Получение полного списка всех новых плейлистов. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -470,17 +440,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/landing3/new-playlists' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - async def podcasts(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[LandingList]: + async def podcasts(self, *args, **kwargs) -> Optional[LandingList]: """Получение подкастов с лендинга. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -492,17 +460,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/landing3/podcasts' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return LandingList.de_json(result, self) @log - async def genres(self, timeout: Union[int, float] = None, *args, **kwargs) -> List[Genre]: + async def genres(self, *args, **kwargs) -> List[Genre]: """Получение жанров музыки. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -514,12 +480,12 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/genres' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Genre.de_list(result, self) @log - async def tags(self, tag_id: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[TagResult]: + async def tags(self, tag_id: str, *args, **kwargs) -> Optional[TagResult]: """Получение тега (подборки). Note: @@ -530,8 +496,6 @@ class ClientAsync(YandexMusicObject): Args: tag_id (:obj:`str`): Уникальный идентификатор тега. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -543,7 +507,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/tags/{tag_id}/playlist-ids' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return TagResult.de_json(result, self) @@ -552,7 +516,6 @@ class ClientAsync(YandexMusicObject): self, track_id: Union[str, int], get_direct_links: bool = False, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[DownloadInfo]: @@ -561,8 +524,6 @@ class ClientAsync(YandexMusicObject): Args: track_id (:obj:`str` | :obj:`list` из :obj:`str`): Уникальный идентификатор трека или треков. get_direct_links (:obj:`bool`, optional): Получить ли при вызове метода прямую ссылку на загрузку. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -574,20 +535,16 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/download-info' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return await DownloadInfo.de_list_async(result, self, get_direct_links) @log - async def track_supplement( - self, track_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Supplement]: + async def track_supplement(self, track_id: Union[str, int], *args, **kwargs) -> Optional[Supplement]: """Получение дополнительной информации о треке. Args: track_id (:obj:`str`): Уникальный идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -599,20 +556,16 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/supplement' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Supplement.de_json(result, self) @log - async def tracks_similar( - self, track_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[SimilarTracks]: + async def tracks_similar(self, track_id: Union[str, int], *args, **kwargs) -> Optional[SimilarTracks]: """Получение похожих треков. Args: track_id (:obj:`str`): Уникальный идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -624,7 +577,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/tracks/{track_id}/similar' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return SimilarTracks.de_json(result, self) @@ -643,7 +596,6 @@ class ClientAsync(YandexMusicObject): total_played_seconds: int = 0, end_position_seconds: int = 0, client_now: str = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -662,8 +614,6 @@ class ClientAsync(YandexMusicObject): total_played_seconds (:obj:`int`, optional): Сколько было всего воспроизведено трека в секундах. end_position_seconds (:obj:`int`, optional): Окончательное значение воспроизведенных секунд. client_now (:obj:`str`, optional): Текущая дата и время клиента в ISO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -693,20 +643,16 @@ class ClientAsync(YandexMusicObject): 'client-now': client_now or f'{datetime.now().isoformat()}Z', } - result = await self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, data, *args, **kwargs) return result == 'ok' @log - async def albums_with_tracks( - self, album_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Album]: + async def albums_with_tracks(self, album_id: Union[str, int], *args, **kwargs) -> Optional[Album]: """Получение альбома по его уникальному идентификатору вместе с треками. Args: album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -718,7 +664,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/albums/{album_id}/with-tracks' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Album.de_json(result, self) @@ -730,7 +676,6 @@ class ClientAsync(YandexMusicObject): type_: str = 'all', page: int = 0, playlist_in_best: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Search]: @@ -749,8 +694,6 @@ class ClientAsync(YandexMusicObject): type_ (:obj:`str`): Среди какого типа искать (трек, плейлист, альбом, исполнитель, пользователь, подкаст). page (:obj:`int`): Номер страницы. playlist_in_best (:obj:`bool`): Выдавать ли плейлисты лучшим вариантом поиска. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -770,7 +713,7 @@ class ClientAsync(YandexMusicObject): 'playlist-in-best': str(playlist_in_best), } - result = await self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params, *args, **kwargs) if isinstance(result, str): raise BadRequestError(result) @@ -778,15 +721,11 @@ class ClientAsync(YandexMusicObject): return Search.de_json(result, self) @log - async def search_suggest( - self, part: str, timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[Suggestions]: + async def search_suggest(self, part: str, *args, **kwargs) -> Optional[Suggestions]: """Получение подсказок по введенной части поискового запроса. Args: part (:obj:`str`): Часть поискового запроса. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -798,14 +737,12 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/search/suggest' - result = await self._request.get(url, {'part': part}, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, {'part': part}, *args, **kwargs) return Suggestions.de_json(result, self) @log - async def users_settings( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[UserSettings]: + async def users_settings(self, user_id: Union[str, int] = None, *args, **kwargs) -> Optional[UserSettings]: """Получение настроек пользователя. Note: @@ -814,8 +751,6 @@ class ClientAsync(YandexMusicObject): Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя чьи настройки хотим получить. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -830,7 +765,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/settings' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return UserSettings.de_json(result.get('user_settings'), self) @@ -839,7 +774,6 @@ class ClientAsync(YandexMusicObject): self, kind: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Union[Playlist, List[Playlist]]: @@ -852,8 +786,6 @@ class ClientAsync(YandexMusicObject): kind (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста или их список. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -872,26 +804,24 @@ class ClientAsync(YandexMusicObject): data = {'kinds': kind} - result = await self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, data, *args, **kwargs) return Playlist.de_list(result, self) else: url = f'{self.base_url}/users/{user_id}/playlists/{kind}' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Playlist.de_json(result, self) @log async def users_playlists_recommendations( - self, kind: Union[str, int], user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs + self, kind: Union[str, int], user_id: Union[str, int] = None, *args, **kwargs ): """Получение рекомендаций для плейлиста. Args: kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. user_id (:obj:`str` | :obj:`int`): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -905,7 +835,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/recommendations' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return PlaylistRecommendations.de_json(result, self) @@ -915,7 +845,6 @@ class ClientAsync(YandexMusicObject): title: str, visibility: str = 'public', user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -925,8 +854,6 @@ class ClientAsync(YandexMusicObject): title (:obj:`str`): Название. visibility (:obj:`str`, optional): Модификатор доступа. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -943,21 +870,19 @@ class ClientAsync(YandexMusicObject): data = {'title': title, 'visibility': visibility} - result = await self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, data, *args, **kwargs) return Playlist.de_json(result, self) @log async def users_playlists_delete( - self, kind: Union[str, int], user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs + self, kind: Union[str, int], user_id: Union[str, int] = None, *args, **kwargs ) -> bool: """Удаление плейлиста. Args: kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -972,7 +897,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/delete' - result = await self._request.post(url, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, *args, **kwargs) return result == 'ok' @@ -982,7 +907,6 @@ class ClientAsync(YandexMusicObject): kind: Union[str, int], name: str, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -992,8 +916,6 @@ class ClientAsync(YandexMusicObject): kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. name (:obj:`str`): Новое название. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1008,7 +930,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/name' - result = await self._request.post(url, {'value': name}, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, {'value': name}, *args, **kwargs) return Playlist.de_json(result, self) @@ -1018,7 +940,6 @@ class ClientAsync(YandexMusicObject): kind: Union[str, int], visibility: str, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1031,8 +952,6 @@ class ClientAsync(YandexMusicObject): kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. visibility (:obj:`str`): Новое название. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1047,7 +966,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/{kind}/visibility' - result = await self._request.post(url, {'value': visibility}, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, {'value': visibility}, *args, **kwargs) return Playlist.de_json(result, self) @@ -1058,7 +977,6 @@ class ClientAsync(YandexMusicObject): diff: str, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1074,8 +992,6 @@ class ClientAsync(YandexMusicObject): revision (:obj:`int`): TODO. diff (:obj:`str`): JSON представления отличий старого и нового плейлиста. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1092,7 +1008,7 @@ class ClientAsync(YandexMusicObject): data = {'kind': kind, 'revision': revision, 'diff': diff} - result = await self._request.post(url, data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, data, *args, **kwargs) return Playlist.de_json(result, self) @@ -1105,7 +1021,6 @@ class ClientAsync(YandexMusicObject): at: int = 0, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1121,8 +1036,6 @@ class ClientAsync(YandexMusicObject): at (:obj:`int`): Индекс для вставки. revision (:obj:`int`): TODO. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1137,7 +1050,7 @@ class ClientAsync(YandexMusicObject): diff = Difference().add_insert(at, {'id': track_id, 'album_id': album_id}) - return await self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) + return await self.users_playlists_change(kind, diff.to_json(), revision, user_id, *args, **kwargs) @log async def users_playlists_delete_track( @@ -1147,7 +1060,6 @@ class ClientAsync(YandexMusicObject): to: int, revision: int = 1, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[Playlist]: @@ -1162,8 +1074,6 @@ class ClientAsync(YandexMusicObject): to (:obj:`int`): По какой индекс. revision (:obj:`int`): TODO. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1178,18 +1088,16 @@ class ClientAsync(YandexMusicObject): diff = Difference().add_delete(from_, to) - return await self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs) + return await self.users_playlists_change(kind, diff.to_json(), revision, user_id, *args, **kwargs) @log - async def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]: + async def rotor_account_status(self, *args, **kwargs) -> Optional[Status]: """Получение статуса пользователя с дополнителньыми полями. Note: Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1202,17 +1110,15 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/rotor/account/status' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Status.de_json(result, self) @log - async def rotor_stations_dashboard(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Dashboard]: + async def rotor_stations_dashboard(self, *args, **kwargs) -> Optional[Dashboard]: """Получение рекомендованных станций текущего пользователя. Args: - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1224,14 +1130,12 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/rotor/stations/dashboard' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Dashboard.de_json(result, self) @log - async def rotor_stations_list( - self, language: str = 'ru', timeout: Union[int, float] = None, *args, **kwargs - ) -> List[StationResult]: + async def rotor_stations_list(self, language: str = 'ru', *args, **kwargs) -> List[StationResult]: """Получение всех радиостанций с настройками пользователя. Note: @@ -1240,8 +1144,6 @@ class ClientAsync(YandexMusicObject): Args: language (:obj:`str`): Язык, на котором будет информация о станциях. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1253,7 +1155,9 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/rotor/stations/list' - result = await self._request.get(url, {'language': language}, timeout=timeout, *args, **kwargs) + # TODO (MarshalX) почему тут константный 'ru' когда есть поддержка выбора языка клиентом + + result = await self._request.get(url, {'language': language}, *args, **kwargs) return StationResult.de_list(result, self) @@ -1267,7 +1171,6 @@ class ClientAsync(YandexMusicObject): batch_id: str = None, total_played_seconds: Union[int, float] = None, track_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1291,8 +1194,6 @@ class ClientAsync(YandexMusicObject): total_played_seconds (:obj:`int` |:obj:`float`, optional): Сколько было проиграно секунд трека перед действием. track_id (:obj:`int` | :obj:`str`, optional): Уникальной идентификатор трека. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1322,7 +1223,7 @@ class ClientAsync(YandexMusicObject): if total_played_seconds: data.update({'totalPlayedSeconds': total_played_seconds}) - result = await self._request.post(url, params=params, json=data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, params=params, json=data, *args, **kwargs) return result == 'ok' @@ -1333,7 +1234,6 @@ class ClientAsync(YandexMusicObject): from_: str, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1348,7 +1248,7 @@ class ClientAsync(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return await self.rotor_station_feedback( - station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id, timeout=timeout, *args, **kwargs + station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id, *args, **kwargs ) @log @@ -1358,7 +1258,6 @@ class ClientAsync(YandexMusicObject): track_id: Union[str, int], batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1373,7 +1272,7 @@ class ClientAsync(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return await self.rotor_station_feedback( - station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, timeout=timeout, *args, **kwargs + station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id, *args, **kwargs ) @log @@ -1384,7 +1283,6 @@ class ClientAsync(YandexMusicObject): total_played_seconds: float, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1406,7 +1304,6 @@ class ClientAsync(YandexMusicObject): track_id=track_id, total_played_seconds=total_played_seconds, batch_id=batch_id, - timeout=timeout, *args, **kwargs, ) @@ -1419,7 +1316,6 @@ class ClientAsync(YandexMusicObject): total_played_seconds: float, batch_id: str = None, timestamp: Union[str, float, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1441,21 +1337,16 @@ class ClientAsync(YandexMusicObject): track_id=track_id, total_played_seconds=total_played_seconds, batch_id=batch_id, - timeout=timeout, *args, **kwargs, ) @log - async def rotor_station_info( - self, station: str, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[StationResult]: + async def rotor_station_info(self, station: str, *args, **kwargs) -> List[StationResult]: """Получение информации о станции и пользовательских настроек на неё. Args: station (:obj:`str`): Станция. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1467,7 +1358,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/rotor/station/{station}/info' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return StationResult.de_list(result, self) @@ -1477,9 +1368,8 @@ class ClientAsync(YandexMusicObject): station: str, mood_energy: str, diversity: str, - language: str = 'not-russian', + language: str = 'not-russian', # TODO (MarshalX) почему не any type_: str = 'rotor', - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1502,8 +1392,6 @@ class ClientAsync(YandexMusicObject): diversity (:obj:`str`): Треки. language (:obj:`str`): Язык. type_ (:obj:`str`): Тип. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1520,7 +1408,7 @@ class ClientAsync(YandexMusicObject): if language: data.update({'language': language}) - result = await self._request.post(url, json=data, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, json=data, *args, **kwargs) return result == 'ok' @@ -1530,7 +1418,6 @@ class ClientAsync(YandexMusicObject): station: str, settings2: bool = True, queue: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[StationTracksResult]: @@ -1555,8 +1442,6 @@ class ClientAsync(YandexMusicObject): station (:obj:`str`): Станция. settings2 (:obj:`bool`, optional): Использовать ли второй набор настроек. queue (:obj:`str` | :obj:`int` , optional): Уникальной идентификатор трека, который только что был. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1575,20 +1460,16 @@ class ClientAsync(YandexMusicObject): if queue: params = {'queue': queue} - result = await self._request.get(url, params=params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params=params, *args, **kwargs) return StationTracksResult.de_json(result, self) @log - async def artists_brief_info( - self, artist_id: Union[str, int], timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[BriefInfo]: + async def artists_brief_info(self, artist_id: Union[str, int], *args, **kwargs) -> Optional[BriefInfo]: """Получение информации об артисте. Args: artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор исполнителя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1599,7 +1480,7 @@ class ClientAsync(YandexMusicObject): """ url = f'{self.base_url}/artists/{artist_id}/brief-info' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return BriefInfo.de_json(result, self) @@ -1609,7 +1490,6 @@ class ClientAsync(YandexMusicObject): artist_id: Union[str, int], page: int = 0, page_size: int = 20, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ArtistTracks]: @@ -1619,8 +1499,6 @@ class ClientAsync(YandexMusicObject): artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор артиста. page (:obj:`int`, optional): Номер страницы. page_size (:obj:`int`, optional): Количество треков на странице. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1634,7 +1512,7 @@ class ClientAsync(YandexMusicObject): params = {'page': page, 'page-size': page_size} - result = await self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params, *args, **kwargs) return ArtistTracks.de_json(result, self) @@ -1645,7 +1523,6 @@ class ClientAsync(YandexMusicObject): page: int = 0, page_size: int = 20, sort_by: str = 'year', - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ArtistAlbums]: @@ -1659,8 +1536,6 @@ class ClientAsync(YandexMusicObject): page (:obj:`int`, optional): Номер страницы. page_size (:obj:`int`, optional): Количество альбомов на странице. sort_by (:obj:`str`, optional): Параметр для сортировки. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1674,7 +1549,7 @@ class ClientAsync(YandexMusicObject): params = {'sort-by': sort_by, 'page': page, 'page-size': page_size} - result = await self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params, *args, **kwargs) return ArtistAlbums.de_json(result, self) @@ -1684,7 +1559,6 @@ class ClientAsync(YandexMusicObject): ids: Union[List[Union[str, int]], str, int], remove: bool = False, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1703,8 +1577,6 @@ class ClientAsync(YandexMusicObject): remove (:obj:`bool`, optional): Если :obj:`True` то снимает отметку, иначе ставит. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1719,7 +1591,7 @@ class ClientAsync(YandexMusicObject): action = 'remove' if remove else 'add-multiple' url = f'{self.base_url}/users/{user_id}/likes/{object_type}s/{action}' - result = await self._request.post(url, {f'{object_type}-ids': ids}, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, {f'{object_type}-ids': ids}, *args, **kwargs) if object_type == 'track': return 'revision' in result @@ -1731,7 +1603,6 @@ class ClientAsync(YandexMusicObject): self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1745,8 +1616,6 @@ class ClientAsync(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1755,14 +1624,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('track', track_ids, False, user_id, timeout, *args, **kwargs) + return await self._like_action('track', track_ids, False, user_id, *args, **kwargs) @log async def users_likes_tracks_remove( self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1773,8 +1641,6 @@ class ClientAsync(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1783,14 +1649,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs) + return await self._like_action('track', track_ids, True, user_id, *args, **kwargs) @log async def users_likes_artists_add( self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1801,8 +1666,6 @@ class ClientAsync(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1811,14 +1674,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('artist', artist_ids, False, user_id, timeout, *args, **kwargs) + return await self._like_action('artist', artist_ids, False, user_id, *args, **kwargs) @log async def users_likes_artists_remove( self, artist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1829,8 +1691,6 @@ class ClientAsync(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1839,14 +1699,14 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs) + # TODO (Marshal) что за True. Переделать на named argument + return await self._like_action('artist', artist_ids, True, user_id, *args, **kwargs) @log async def users_likes_playlists_add( self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1861,8 +1721,6 @@ class ClientAsync(YandexMusicObject): идентификатор плейлиста или плейлистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1871,14 +1729,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('playlist', playlist_ids, False, user_id, timeout, *args, **kwargs) + return await self._like_action('playlist', playlist_ids, False, user_id, *args, **kwargs) @log async def users_likes_playlists_remove( self, playlist_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1893,8 +1750,6 @@ class ClientAsync(YandexMusicObject): идентификатор плейлиста или плейлистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1903,14 +1758,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs) + return await self._like_action('playlist', playlist_ids, True, user_id, *args, **kwargs) @log async def users_likes_albums_add( self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1921,8 +1775,6 @@ class ClientAsync(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1931,14 +1783,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('album', album_ids, False, user_id, timeout, *args, **kwargs) + return await self._like_action('album', album_ids, False, user_id, *args, **kwargs) @log async def users_likes_albums_remove( self, album_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -1949,8 +1800,6 @@ class ClientAsync(YandexMusicObject): идентификатор артиста или артистов. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1959,14 +1808,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs) + return await self._like_action('album', album_ids, True, user_id, *args, **kwargs) async def _get_list( self, object_type: str, ids: Union[List[Union[str, int]], int, str], params: dict = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Union[Artist, Album, Track, Playlist]]: @@ -1977,8 +1825,6 @@ class ClientAsync(YandexMusicObject): ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор объекта или объектов. params (:obj:`dict`, optional): Параметры, которые будут переданы в запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -1995,21 +1841,17 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/{object_type}s' + ('/list' if object_type == 'playlist' else '') - result = await self._request.post(url, params, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, params, *args, **kwargs) return de_list[object_type](result, self) @log - async def artists( - self, artist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Artist]: + async def artists(self, artist_ids: Union[List[Union[str, int]], int, str], *args, **kwargs) -> List[Artist]: """Получение исполнителя/исполнителей. Args: artist_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор исполнителя или исполнителей. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2018,19 +1860,15 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_list('artist', artist_ids, timeout=timeout, *args, **kwargs) + return await self._get_list('artist', artist_ids, *args, **kwargs) @log - async def albums( - self, album_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Album]: + async def albums(self, album_ids: Union[List[Union[str, int]], int, str], *args, **kwargs) -> List[Album]: """Получение альбома/альбомов. Args: album_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор альбома или альбомов. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2039,14 +1877,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_list('album', album_ids, timeout=timeout, *args, **kwargs) + return await self._get_list('album', album_ids, *args, **kwargs) @log async def tracks( self, track_ids: Union[List[Union[str, int]], int, str], with_positions: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Track]: @@ -2056,8 +1893,6 @@ class ClientAsync(YandexMusicObject): track_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор трека или треков. with_positions (:obj:`bool`, optional): С позициями TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2066,13 +1901,11 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_list( - 'track', track_ids, {'with-positions': str(with_positions)}, timeout, *args, **kwargs - ) + return await self._get_list('track', track_ids, {'with-positions': str(with_positions)}, *args, **kwargs) @log async def playlists_list( - self, playlist_ids: Union[List[Union[str, int]], int, str], timeout: Union[int, float] = None, *args, **kwargs + self, playlist_ids: Union[List[Union[str, int]], int, str], *args, **kwargs ) -> List[Playlist]: """Получение плейлиста/плейлистов. @@ -2083,8 +1916,6 @@ class ClientAsync(YandexMusicObject): Args: playlist_ids (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`list` из :obj:`int`): Уникальный идентификатор плейлиста или плейлистов. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2093,12 +1924,10 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_list('playlist', playlist_ids, timeout=timeout, *args, **kwargs) + return await self._get_list('playlist', playlist_ids, *args, **kwargs) @log - async def playlists_collective_join( - self, user_id: int, token: str, timeout: Union[int, float] = None, *args, **kwargs - ) -> bool: + async def playlists_collective_join(self, user_id: int, token: str, *args, **kwargs) -> bool: """Присоединение к плейлисту как соавтор. Note: @@ -2110,8 +1939,6 @@ class ClientAsync(YandexMusicObject): Args: user_id (:obj:`int`): Владелец плейлиста. token (:obj:`str`): Токен для присоединения. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs: Произвольные аргументы (будут переданы в запрос). Returns: @@ -2124,21 +1951,17 @@ class ClientAsync(YandexMusicObject): params = {'uid': user_id, 'token': token} - result = await self._request.post(url, params=params, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, params=params, *args, **kwargs) return result == 'ok' @log - async def users_playlists_list( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Playlist]: + async def users_playlists_list(self, user_id: Union[str, int] = None, *args, **kwargs) -> List[Playlist]: """Получение списка плейлистов пользователя. Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2152,7 +1975,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/playlists/list' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Playlist.de_list(result, self) @@ -2161,7 +1984,6 @@ class ClientAsync(YandexMusicObject): object_type: str, user_id: Union[str, int] = None, params: dict = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Union[List[Like], Optional[TracksList]]: @@ -2172,8 +1994,6 @@ class ClientAsync(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. params (:obj:`dict`, optional): Параметры, которые будут переданы в запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2187,7 +2007,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/likes/{object_type}s' - result = await self._request.get(url, params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params, *args, **kwargs) if object_type == 'track': return TracksList.de_json(result.get('library'), self) @@ -2199,7 +2019,6 @@ class ClientAsync(YandexMusicObject): self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[TracksList]: @@ -2209,8 +2028,6 @@ class ClientAsync(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. if_modified_since_revision (:obj:`int`, optional): TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2220,12 +2037,12 @@ class ClientAsync(YandexMusicObject): :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ return await self._get_likes( - 'track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout, *args, **kwargs + 'track', user_id, {'if-modified-since-revision': if_modified_since_revision}, *args, **kwargs ) @log async def users_likes_albums( - self, user_id: Union[str, int] = None, rich: bool = True, timeout: Union[int, float] = None, *args, **kwargs + self, user_id: Union[str, int] = None, rich: bool = True, *args, **kwargs ) -> List[Like]: """Получение альбомов с отметкой "Мне нравится". @@ -2233,8 +2050,6 @@ class ClientAsync(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. rich (:obj:`bool`, optional): Если False, то приходит укороченная версия. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2243,14 +2058,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_likes('album', user_id, {'rich': str(rich)}, timeout, *args, **kwargs) + return await self._get_likes('album', user_id, {'rich': str(rich)}, *args, **kwargs) @log async def users_likes_artists( self, user_id: Union[str, int] = None, with_timestamps: bool = True, - timeout: Union[int, float] = None, *args, **kwargs, ) -> List[Like]: @@ -2260,8 +2074,6 @@ class ClientAsync(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. with_timestamps (:obj:`bool`, optional): С временными метками TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2270,21 +2082,15 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_likes( - 'artist', user_id, {'with-timestamps': str(with_timestamps)}, timeout, *args, **kwargs - ) + return await self._get_likes('artist', user_id, {'with-timestamps': str(with_timestamps)}, *args, **kwargs) @log - async def users_likes_playlists( - self, user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[Like]: + async def users_likes_playlists(self, user_id: Union[str, int] = None, *args, **kwargs) -> List[Like]: """Получение плейлистов с отметкой "Мне нравится". Args: user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2293,14 +2099,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs) + return await self._get_likes('playlist', user_id, *args, **kwargs) @log async def users_dislikes_tracks( self, user_id: Union[str, int] = None, if_modified_since_revision: int = 0, - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[TracksList]: @@ -2310,8 +2115,6 @@ class ClientAsync(YandexMusicObject): user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. if_modified_since_revision (:obj:`bool`, optional): TODO. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2326,7 +2129,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/users/{user_id}/dislikes/tracks' result = await self._request.get( - url, {'if_modified_since_revision': if_modified_since_revision}, timeout=timeout, *args, **kwargs + url, {'if_modified_since_revision': if_modified_since_revision}, *args, **kwargs ) return TracksList.de_json(result.get('library'), self) @@ -2336,7 +2139,6 @@ class ClientAsync(YandexMusicObject): ids: Union[List[Union[str, int]], str, int], remove: bool = False, user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2348,8 +2150,6 @@ class ClientAsync(YandexMusicObject): remove (:obj:`bool`, optional): Если :obj:`True`, то снимает отметку, иначе ставит. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2364,7 +2164,7 @@ class ClientAsync(YandexMusicObject): action = 'remove' if remove else 'add-multiple' url = f'{self.base_url}/users/{user_id}/dislikes/tracks/{action}' - result = await self._request.post(url, {f'track-ids': ids}, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, {f'track-ids': ids}, *args, **kwargs) return 'revision' in result @@ -2373,7 +2173,6 @@ class ClientAsync(YandexMusicObject): self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2387,8 +2186,6 @@ class ClientAsync(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2397,14 +2194,13 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._dislike_action(track_ids, False, user_id, timeout, *args, **kwargs) + return await self._dislike_action(track_ids, False, user_id, *args, **kwargs) @log async def users_dislikes_tracks_remove( self, track_ids: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None, - timeout: Union[int, float] = None, *args, **kwargs, ) -> bool: @@ -2415,8 +2211,6 @@ class ClientAsync(YandexMusicObject): идентификатор трека или треков. user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя. Если не указан используется ID текущего пользователя. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2425,7 +2219,7 @@ class ClientAsync(YandexMusicObject): Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. """ - return await self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs) + return await self._dislike_action(track_ids, True, user_id, *args, **kwargs) @log async def after_track( @@ -2436,7 +2230,6 @@ class ClientAsync(YandexMusicObject): context: str = 'playlist', types: str = 'shot', from_: str = 'mobile-landing-origin-default', - timeout: Union[int, float] = None, *args, **kwargs, ) -> Optional[ShotEvent]: @@ -2461,8 +2254,6 @@ class ClientAsync(YandexMusicObject): context (:obj:`str`, optional): Место, откуда было вызвано получение. types (:obj:`str`, optional): Тип того, что вернуть после трека. from_ (:obj:`str`, optional): Место, с которого попали в контекст. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2483,15 +2274,13 @@ class ClientAsync(YandexMusicObject): 'types': types, } - result = await self._request.get(url, params=params, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, params=params, *args, **kwargs) # TODO судя по всему эндпоинт ещё возвращает рекламу после треков для пользователей без подписки. return ShotEvent.de_json(result.get('shot_event'), self) @log - async def queues_list( - self, device: str = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> List[QueueItem]: + async def queues_list(self, device: str = None, *args, **kwargs) -> List[QueueItem]: """Получение всех очередей треков с разных устройств для синхронизации между ними. Note: @@ -2502,8 +2291,6 @@ class ClientAsync(YandexMusicObject): Args: device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2518,18 +2305,16 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/queues' self._request.headers['X-Yandex-Music-Device'] = device - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return QueueItem.de_list(result.get('queues'), self) @log - async def queue(self, queue_id: str, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Queue]: + async def queue(self, queue_id: str, *args, **kwargs) -> Optional[Queue]: """Получение информации об очереди треков и самих треков в ней. Args: queue_id (:obj:`str`): Уникальный идентификатор очереди. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2540,13 +2325,13 @@ class ClientAsync(YandexMusicObject): """ url = f'{self.base_url}/queues/{queue_id}' - result = await self._request.get(url, timeout=timeout, *args, **kwargs) + result = await self._request.get(url, *args, **kwargs) return Queue.de_json(result, self) @log async def queue_update_position( - self, queue_id: str, current_index: int, device: str = None, timeout: Union[int, float] = None, *args, **kwargs + self, queue_id: str, current_index: int, device: str = None, *args, **kwargs ) -> bool: """Установка текущего индекса проигрываемого трека в очереди треков. @@ -2557,8 +2342,6 @@ class ClientAsync(YandexMusicObject): queue_id (:obj:`str`): Уникальный идентификатор очереди. current_index (:obj:`int`): Текущий индекс. device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2574,22 +2357,18 @@ class ClientAsync(YandexMusicObject): self._request.headers['X-Yandex-Music-Device'] = device result = await self._request.post( - url, {'isInteractive': False}, params={'currentIndex': current_index}, timeout=timeout, *args, **kwargs + url, {'isInteractive': False}, params={'currentIndex': current_index}, *args, **kwargs ) return result.get('status') == 'ok' @log - async def queue_create( - self, queue: Union[Queue, str], device: str = None, timeout: Union[int, float] = None, *args, **kwargs - ) -> Optional[str]: + async def queue_create(self, queue: Union[Queue, str], device: str = None, *args, **kwargs) -> Optional[str]: """Создание новой очереди треков. Args: queue (:obj:`yandex_music.Queue` | :obj:`str`): Объект очереди или JSON строка с этим объектом. device (:obj:`str`, optional): Содержит информацию об устройстве с которого выполняется запрос. - timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания - ответа от сервера вместо указанного при создании пула. **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: @@ -2607,7 +2386,7 @@ class ClientAsync(YandexMusicObject): url = f'{self.base_url}/queues' self._request.headers['X-Yandex-Music-Device'] = device - result = await self._request.post(url, queue, timeout=timeout, *args, **kwargs) + result = await self._request.post(url, queue, *args, **kwargs) return result.get('id_') diff --git a/yandex_music/utils/request.py b/yandex_music/utils/request.py index 71257b5..04284a5 100644 --- a/yandex_music/utils/request.py +++ b/yandex_music/utils/request.py @@ -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: diff --git a/yandex_music/utils/request_async.py b/yandex_music/utils/request_async.py index 62d2d0a..8807b16 100644 --- a/yandex_music/utils/request_async.py +++ b/yandex_music/utils/request_async.py @@ -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: