yadisk-async

Библиотека-клиент REST API Яндекс.Диска с поддержкой async/await / Yandex.Disk REST API client library with async/await support


Keywords
yandex, disk, rest, async, python, python3, rest-api, yandex-disk
License
LGPL-3.0
Install
pip install yadisk-async==1.4.5

Documentation

YaDisk-async

Read the Docs PyPI

YaDisk-async - это библиотека-клиент REST API Яндекс.Диска с поддержкой async/await.

Данная библиотека больше не поддерживается, используйте yadisk>=2.0.0 вместо неё, она также поддерживает асинхронный API.

Документация доступна на Read the Docs (RU) и Read the Docs (EN).

Установка

pip install yadisk-async

или

python setup.py install

Примеры

import yadisk_async

y = yadisk_async.YaDisk(token="<token>")
# или
# y = yadisk_async.YaDisk("<id-приложения>", "<secret-приложения>", "<токен>")

# Проверяет, валиден ли токен
print(await y.check_token())

# Получает общую информацию о диске
print(await y.get_disk_info())

# Выводит содержимое "/some/path"
print([i async for i in await y.listdir("/some/path")])

# Загружает "file_to_upload.txt" в "/destination.txt"
await y.upload("file_to_upload.txt", "/destination.txt")

# То же самое
with open("file_to_upload.txt", "rb") as f:
    await y.upload(f, "/destination.txt")

# То же самое, но с aiofiles
async with aiofiles.open("file_to_upload.txt", "rb") as f:
    await y.upload(f, "/destination.txt")

# Скачивает "/some-file-to-download.txt" в "downloaded.txt"
await y.download("/some-file-to-download.txt", "downloaded.txt")

# То же самое, но с aiofiles
async with aiofiles.open("downloaded.txt", "wb") as f:
    await y.download("/some-file-to-download.txt", f)

# Безвозвратно удаляет "/file-to-remove"
await y.remove("/file-to-remove", permanently=True)

# Создаёт новую папку "/test-dir"
print(await y.mkdir("/test-dir"))

# Всегда закрывайте все соединения или получите предупреждение
await y.close()

История изменений

  • Release 1.4.5 (2023-12-14)
    • Добавлено предупреждение об устаревании при импорте
    • Данная библиотека больше не поддерживается, используйте yadisk>=2.0.0 вместо неё, она также поддерживает асинхронный API
  • Release 1.4.4 (2023-10-15)
    • Методы upload() и download() (и связянные с ними) теперь могут загружать/скачивать файлы, не поддерживающие операцию seek() (например, stdin и stdout, при условии, что они открыты в режиме "rb" или "wb"), см. PR #31
  • Release 1.4.3 (2023-04-22)
    • Пути вида app:/ теперь работают правильно (см. issue #26)
  • Release 1.4.2 (2023-03-20)
    • Исправлено issue #29: TypeError: 'type' object is not subscriptable
    • Исправлена ошибка (Python <3.9): TypeError: Too many parameters for typing.AsyncIterable; actual 2, expected 1
  • Release 1.4.1 (2023-02-28)
    • Исправлено issue #28: TypeError при вызове download_public() с параметром path
    • Исправлено AttributeError при вызове ResourceLinkObject.public_listdir()
  • Release 1.4.0 (2023-01-30)
    • Добавлены convenience-методы для объектов ...Object (например, см. ResourceObject)
    • Добавлены подсказки типов (type hints)
    • Улучшены проверки ошибок и проверка ответа
    • Добавлены InvalidResponseError, PayloadTooLargeError, UploadTrafficLimitExceededError
    • Добавлено несколько недостающих полей объектов DiskInfoObject и SystemFoldersObject
    • Добавлены методы rename(), upload_by_link() и download_by_link()
    • Добавлен аттрибут default_args объекта YaDisk
    • download() и upload() теперь возвращают ResourceLinkObject
    • До этого возвращаемые объекты LinkObject были заменены более конкретными подклассами
    • TimeoutError теперь тоже вызывает повторную попытку
    • Добавлена поддержка асинхронных файлов для download() и upload()
    • По умолчанию используется библиотека aiofiles для открытия файлов
  • Release 1.3.6 (2023-01-20)
    • Исправлено issue #26: символ ':' в именах файлов приводит к BadRequestError. Это поведение вызвано работой самого REST API Яндекс.Диска, но было исправлено на уровне библиотеки.
  • Release 1.3.5 (2022-11-10)
    • Исправлен баг в is_file() и is_dir(): из-за опечатки функции вызывали исключение AttributeError (PR #6).
  • Release 1.3.4 (2022-08-17)
    • Исправлен баг в check_token(): функция могла вызвать ForbiddenError, если у приложения недостатчно прав (issue #23).
  • Release 1.3.3 (2021-12-31)
    • Исправлено: не распознавались ссылки на асинхронные операции, если они использовали http:// (вместо https://). Иногда Яндекс.Диск может вернуть http:// ссылку на асинхронную операцию. Теперь обе версии ссылок распознаются правильно, при этом, при получении информации об операции (через get_operation_status()) всегда используется https:// версия ссылки, даже если Яндекс.Диск вернул http://.
  • Release 1.3.2 (2021-07-10)
    • Исправлено значение __version__
  • Release 1.3.1 (2021-07-10)
    • Исправлена ошибка AttributeError в объекте SessionWithHeaders (PR #1)
    • Исправлены тесты корзины
  • Release 1.3.0 (2019-07-06)
    • Реализована поддержка async/await
    • Библиотека была переименована из yadisk в yadisk-async

Следующие релизы относятся к оригинальной библиотеке yadisk:

  • Release 1.2.14 (2019-03-26)
    • Исправлена ошибка TypeError в функциях get_public_* при использовании с параметром path (issue #7)
    • Добавлен аттрибут unlimited_autoupload_enabled для DiskInfoObject
  • Release 1.2.13 (2019-02-23)
    • Добавлен md5 параметр для remove()
    • Добавлен UserPublicInfoObject
    • Добавлен аттрибут country для UserObject
    • Добавлен аттрибут photoslice_time для ResourceObject, PublicResourceObject и TrashResourceObject
  • Release 1.2.12 (2018-10-11)
    • Исправлен баг: не работает параметр fields в listdir() (issue #4)
  • Release 1.2.11 (2018-06-30)
    • Добавлен недостающий параметр sort для get_meta()
    • Добавлены аттрибуты file и antivirus_status для ResourceObject, PublicResourceObject и TrashResourceObject
    • Добавлен параметр headers
    • Исправлена опечатка в download() и download_public() (issue #2)
    • Убран параметр *args
  • Release 1.2.10 (2018-06-14)
    • Исправлено поведение timeout=None. None должен означать „без таймаута“, но в предыдущих версиях значение None было синонимично со стандартным таймаутом.
  • Release 1.2.9 (2018-04-28)
    • Изменена лицензия на LGPLv3 (см. COPYING и COPYING.lesser)
    • Другие изменения информации о пакете
  • Release 1.2.8 (2018-04-17)
    • Исправлено несколько опечаток: у PublicResourceListObject.items и TrashResourceListObject.items были неправильные типы данных
    • Псевдонимы полей в параметре fields заменяются при выполнении запросов API (например, embedded -> _embedded)
  • Release 1.2.7 (2018-04-15)
    • Исправлен баг перемотки файла при загрузке/скачивании после повторной попытки
  • Release 1.2.6 (2018-04-13)
    • Теперь объекты сессий requests кэшируются, чтобы их можно было переиспользовать (иногда может существенно ускорить выполнение запросов)
    • keep-alive отключается при загрузке/скачивании файлов по умолчанию
  • Release 1.2.5 (2018-03-31)
    • Исправлен баг (ошибка на единицу) в utils.auto_retry() (иногда мог вызвать AttributeError)
    • Повторные попытки применяются для upload(), download() и download_public() целиком
    • Задано stream=True для download() и download_public()
    • Другие мелкие исправления
  • Release 1.2.4 (2018-02-19)
    • Исправлена опечатка (TokenObject.exprires_in -> TokenObject.expires_in)
  • Release 1.2.3 (2018-01-20)
    • Исправлено TypeError при вызове WrongResourceTypeError
  • Release 1.2.2 (2018-01-19)
    • refresh_token() больше не требует валидный или пустой токен.
  • Release 1.2.1 (2018-01-14)
    • Исправлена неработоспособность повторных попыток.
  • Release 1.2.0 (2018-01-14)
    • Исправлено использование n_retries=0 в upload(), download() и download_public()
    • upload(), download() и download_public() больше не возвращают ничего (см. документацию)
    • Добавлен модуль utils (см. документацию)
    • Добавлены RetriableYaDiskError, WrongResourceTypeError, BadGatewayError и GatewayTimeoutError
    • listdir() теперь вызывает WrongResourceTypeError вместо NotADirectoryError
  • Release 1.1.1 (2017-12-29)
    • Исправлена обработка аргументов в upload(), download() и download_public(). До этого использование n_retries и retry_interval вызывало исключение (TypeError).
  • Release 1.1.0 (2017-12-27)
    • Усовершенствованные исключения (см. документацию)
    • Добавлена поддержка параметра force_async
    • Мелкие исправления багов
  • Release 1.0.8 (2017-11-29)
    • Исправлен ещё один баг в listdir()
  • Release 1.0.7 (2017-11-04)
    • Добавлен install_requires в setup.py
  • Release 1.0.6 (2017-11-04)
    • Некоторые функции теперь возвращают OperationLinkObject
  • Release 1.0.5 (2017-10-29)
    • Исправлен setup.py, теперь исключает тесты
  • Release 1.0.4 (2017-10-23)
    • Исправлены баги в upload, download и listdir
    • Значение по-умолчанию limit в listdir установлено в 10000
  • Release 1.0.3 (2017-10-22)
    • Добавлен модуль settings
  • Release 1.0.2 (2017-10-19)
    • Исправлена функция get_code_url (добавлены недостающие параметры)
  • Release 1.0.1 (2017-10-18)
    • Исправлен серьёзный баг в GetTokenRequest (добавлен недостающий параметр)
  • Release 1.0.0 (2017-10-18)
    • Первый релиз