diff --git a/README.md b/README.md index 0121b9d..ba641fb 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ usage: yandex-music-downloader [-h] [--quality <Качество>] [--skip-exist [--delay <Задержка>] [--stick-to-artist] [--only-music] [--compatibility-level <Уровень совместимости>] + [--timeout <Время ожидания>] (--artist-id | --album-id | --track-id | --playlist-id <владелец плейлиста>/<тип плейлиста> | -u URL) [--unsafe-path] [--dir <Папка>] [--path-pattern <Паттерн>] --token <Токен> @@ -99,6 +100,8 @@ options: --only-music Загружать только музыкальные альбомы (пропускать подкасты и аудиокниги) --compatibility-level <Уровень совместимости> Уровень совместимости, от 0 до 1. См. README для подробного описания (по умолчанию: 1) + --timeout <Время ожидания> + Время ожидания ответа от сервера, в секундах. Увеличьте если возникают сетевые ошибки (по умолчанию: 20) ID: --artist-id diff --git a/pyproject.toml b/pyproject.toml index 76a0175..5613769 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "yandex-music-downloader" -version = "3.3.1b0" +version = "3.4.0b0" description = "Загрузчик музыки с сервиса Яндекс.Музыка" requires-python = ">=3.9" readme = "README.md" diff --git a/ymd/cli.py b/ymd/cli.py index 17e8cc9..c1b5902 100644 --- a/ymd/cli.py +++ b/ymd/cli.py @@ -50,6 +50,13 @@ def compatibility_level_arg(astr: str) -> int: ) +def natural_int_arg(astr: str) -> int: + aint = int(astr) + if aint > 0: + return aint + raise ArgumentTypeError("Значение должен быть > 0") + + def cover_resolution_arg(astr: str) -> int: if astr == "original": return -1 @@ -129,6 +136,15 @@ def main(): f"Уровень совместимости, от {core.MIN_COMPATIBILITY_LEVEL} до {core.MAX_COMPATIBILITY_LEVEL}. См. README для подробного описания" ), ) + common_group.add_argument( + "--timeout", + metavar="<Время ожидания>", + default=20, + type=natural_int_arg, + help=show_default( + "Время ожидания ответа от сервера, в секундах. Увеличьте если возникают сетевые ошибки" + ), + ) common_group.add_argument("--debug", action="store_true", help=argparse.SUPPRESS) id_group_meta = parser.add_argument_group("ID") @@ -204,7 +220,7 @@ def main(): print("Параметер url указан в неверном формате") return 1 - client = core.init_client(args.token) + client = core.init_client(args.token, args.timeout) result_tracks: Iterable[Track] = [] def album_tracks_gen(album_ids: Iterable[Union[int, str]]) -> Generator[Track]: diff --git a/ymd/core.py b/ymd/core.py index 957524c..254a199 100644 --- a/ymd/core.py +++ b/ymd/core.py @@ -63,8 +63,10 @@ class AlbumCover: mime_type: MimeType -def init_client(token: str) -> Client: - return Client(token).init() +def init_client(token: str, timeout: int) -> Client: + client = Client(token) + client.request.set_timeout(timeout) + return client.init() def full_title(obj: YandexMusicObject) -> Optional[str]: