Yadisk
Библиотека-клиент REST API Яндекс.Диска для Python / Yandex.Disk REST API client library for Python
Install / Use
/learn @ivknv/YadiskREADME
YaDisk
.. |RTD Badge| image:: https://img.shields.io/readthedocs/yadisk.svg :alt: Read the Docs :target: https://yadisk.readthedocs.io/ru/latest/
.. |CI Badge| image:: https://img.shields.io/github/actions/workflow/status/ivknv/yadisk/lint_and_test.yml :alt: GitHub Actions Workflow Status
.. |PyPI Badge| image:: https://img.shields.io/pypi/v/yadisk.svg :alt: PyPI :target: https://pypi.org/project/yadisk
.. |Python Version Badge| image:: https://img.shields.io/pypi/pyversions/yadisk :alt: PyPI - Python Version
.. |Coverage Badge| image:: https://coveralls.io/repos/github/ivknv/yadisk/badge.svg?branch=master :alt: Coverage :target: https://coveralls.io/github/ivknv/yadisk
|RTD Badge| |CI Badge| |PyPI Badge| |Python Version Badge| |Coverage Badge|
.. _English version of this document: https://github.com/ivknv/yadisk/blob/master/README.en.rst
English version of this document_
YaDisk - это библиотека-клиент REST API Яндекс.Диска.
.. _Read the Docs (EN): https://yadisk.readthedocs.io .. _Read the Docs (RU): https://yadisk.readthedocs.io/ru/latest
Документация доступна на Read the Docs (RU)_ и Read the Docs (EN)_.
.. contents:: Содержание:
Установка
:code:yadisk поддерживает несколько HTTP библиотек и реализует одновременно как синхронный,
так и асинхронный API.
На данный момент поддерживаются следующие HTTP библиотеки:
- :code:
requests(используется по умолчанию для синхронного API) - :code:
httpx(синхронный и асинхронный API, используется по умолчанию для асинхронного API) - :code:
aiohttp(асинхронный API) - :code:
pycurl(синхронный API)
Для синхронного API (устанавливает :code:requests):
.. code:: bash
pip install yadisk[sync-defaults]
Для асинхронного API (устанавливает :code:httpx и :code:aiofiles):
.. code:: bash
pip install yadisk[async-defaults]
Вы можете также вручную установить нужные библиотеки:
.. code:: bash
Для использования совместно с pycurl
pip install yadisk[pycurl]
Для использования совместно с aiohttp, также установит aiofiles
pip install yadisk[async-files,aiohttp]
Примеры
Синхронный API
.. code:: python
import yadisk
client = yadisk.Client(token="<токен>")
# или
# client = yadisk.Client("<id-приложения>", "<secret-приложения>", "<токен>")
# Вы можете использовать либо конструкцию with, либо вручную вызвать client.close() в конце
with client:
# Проверяет, валиден ли токен
print(client.check_token())
# Получает общую информацию о диске
print(client.get_disk_info())
# Выводит содержимое "/some/path"
print(list(client.listdir("/some/path")))
# Загружает "file_to_upload.txt" в "/destination.txt"
client.upload("file_to_upload.txt", "/destination.txt")
# То же самое
with open("file_to_upload.txt", "rb") as f:
client.upload(f, "/destination.txt")
# Скачивает "/some-file-to-download.txt" в "downloaded.txt"
client.download("/some-file-to-download.txt", "downloaded.txt")
# Безвозвратно удаляет "/file-to-remove"
client.remove("/file-to-remove", permanently=True)
# Создаёт новую папку "/test-dir"
print(client.mkdir("/test-dir"))
Асинхронный API
.. code:: python
import yadisk
import aiofiles
client = yadisk.AsyncClient(token="<token>")
# или
# client = yadisk.AsyncClient("<application-id>", "<application-secret>", "<token>")
# Вы можете использовать либо конструкцию with, либо вручную вызвать client.close() в конце
async with client:
# Проверяет, валиден ли токен
print(await client.check_token())
# Получает общую информацию о диске
print(await client.get_disk_info())
# Выводит содержимое "/some/path"
print([i async for i in client.listdir("/some/path")])
# Загружает "file_to_upload.txt" в "/destination.txt"
await client.upload("file_to_upload.txt", "/destination.txt")
# То же самое
async with aiofiles.open("file_to_upload.txt", "rb") as f:
await client.upload(f, "/destination.txt")
# То же самое, но с обычными файлами
with open("file_to_upload.txt", "rb") as f:
await client.upload(f, "/destination.txt")
# Скачивает "/some-file-to-download.txt" в "downloaded.txt"
await client.download("/some-file-to-download.txt", "downloaded.txt")
# То же самое
async with aiofiles.open("downloaded.txt", "wb") as f:
await client.download("/some-file-to-download.txt", f)
# Безвозвратно удаляет "/file-to-remove"
await client.remove("/file-to-remove", permanently=True)
# Создаёт новую папку "/test-dir"
print(await client.mkdir("/test-dir"))
Участие в разработке
Если вы хотите поучаствовать в разработке, см.
CONTRIBUTING.rst <https://github.com/ivknv/yadisk/blob/master/CONTRIBUTING.rst>_.
История изменений
.. _issue #2: https://github.com/ivknv/yadisk/issues/2 .. _issue #4: https://github.com/ivknv/yadisk/issues/4 .. _issue #7: https://github.com/ivknv/yadisk/issues/7 .. _issue #23: https://github.com/ivknv/yadisk/issues/23 .. _issue #26: https://github.com/ivknv/yadisk/issues/26 .. _issue #28: https://github.com/ivknv/yadisk/issues/28 .. _issue #29: https://github.com/ivknv/yadisk/issues/29 .. _PR #31: https://github.com/ivknv/yadisk/pull/31 .. _issue #43: https://github.com/ivknv/yadisk/issues/43 .. _issue #45: https://github.com/ivknv/yadisk/issues/45 .. _issue #49: https://github.com/ivknv/yadisk/issues/49 .. _issue #53: https://github.com/ivknv/yadisk/issues/53 .. _Введение: https://yadisk.readthedocs.io/ru/latest/intro.html .. _Справочник API: https://yadisk.readthedocs.io/ru/latest/api_reference/index.html .. _Доступные реализации сессий: https://yadisk.readthedocs.io/ru/latest/api_reference/sessions.html .. _Интерфейс Session: https://yadisk.readthedocs.io/ru/latest/api_reference/session_interface.html .. _requests: https://pypi.org/project/requests .. _Руководство по миграции: https://yadisk.readthedocs.io/ru/latest/migration_guide.html .. _PR #57: https://github.com/ivknv/yadisk/pull/57
-
Release 3.4.0 (2025-07-10)
-
Нововведения:
-
Добавлены методы для управления настройками публичного доступа к ресурсам:
- :code:
Client.update_public_settings() - :code:
Client.get_public_settings() - :code:
Client.get_public_available_settings()
Внимание: похоже, что эти эндпоинты не полностью соответствуют официальной документации REST API, их функциональность на практике ограничена.
- :code:
-
Добавлен новый класс исключений :code:
PasswordRequiredError -
Добавлено несколько новых полей :code:
DiskInfoObject:- :code:
deletion_restricion_days - :code:
hide_screenshots_in_photoslice - :code:
is_legal_entity
- :code:
-
Реализован метод :code:
__dir__()для объектов ответов сервера
-
-
Улучшения:
- :code:
repr()объектов ответов API теперь показывает только те ключи, которые фактически присутствуют (вместо отображения их значений как :code:None, как раньше)
- :code:
-
-
Release 3.3.0 (2025-04-29)
-
Нововведения:
-
Спуфинг User-Agent для обхода ограничения скорости загрузки файлов на Диск (см.
PR #57_). :code:Client.upload()и связанные с ним методы (включая :code:AsyncClient) имеют новый опциональный параметр :code:spoof_user_agent, который по умолчанию имеет значение :code:True. Этот параметр можно использовать для отключения спуфинга, если это необходимо. -
Добавлена поддержка pretty-printing в IPython для :code:
YaDiskObjectи производных классов
-
-
Исправления:
- :code:
Client.wait_for_operation()теперь использует :code:time.monotonic()вместо :code:time.time()
- :code:
-
Улучшения:
- Сообщения об ошибках REST API теперь чётко разделены на четыре части (сообщение, описание, код ошибки и код состояния HTTP)
-
-
Release 3.2.0 (2025-02-03)
-
Нововведения:
-
Добавлен новый метод: :code:
Client.makedirs()и :code:AsyncClient.makedirs()(см.issue #53_) -
Добавлено несколько недостающих полей :code:
DiskInfoObject- :code:
photounlim_size - :code:
will_be_overdrawn - :code:
free_photounlim_end_date - :code:
payment_flow
- :code:
-
Добавлено недостающее поле :code:
sizesдля :code:ResourceObjectи связанных с ним объектов
-
-
Исправления:
- :code:
Client.rename()/ :code:AsyncClient.rename()теперь вызывает :code:ValueErrorпри попытке переименовать корневую папку - Номера автоматических повторных попыток логировались с ошибкой на единицу, теперь они логируются правильно
- :code:
-
-
Release 3.1.0 (2024-07-12)
-
Нововведения:
- Добавлены новые исключения: :code:
GoneErrorи :code:ResourceDownloadLimitExceededError - Добавлен новый метод: :code:
Client.get_all_public_resources()и :code:AsyncClient.get_all_public_resources()
- Добавлены новые исключения: :code:
-
Исправления:
- Задание :code:
headersи других опциональных параметров сессии как :code:Noneбольше не вызывает ошибок - Исправлено неправильное поведение :code:
Client.rename()и :code:AsyncClient.rename()при указании пустого имени файла - Исправлено несколько опечаток в асинхронных реализациях
convenience-методов (:code:
listdir()и аналогичных) - Исправлен неправильный тип данных у атрибута :code:
itemsкласса :code:PublicResourceListObject - Исправлены ошибки при отправке запросов API с помощью
:code:
PycURLSessionпри задании :code:stream=True - Данные не будут записаны в файл методами :code:
Client.download(), :code:Client.download_by_link(), :code:AsyncClient.download()и :code:AsyncClient.download_by_link(), если сервер вернул ошибочный код
- Задание :code:
-
