English version of this document
YaDisk - это библиотека-клиент REST API Яндекс.Диска.
Документация доступна на Read the Docs (RU) и Read the Docs (EN).
yadisk поддерживает несколько HTTP библиотек и реализует одновременно как синхронный,
так и асинхронный API.
На данный момент поддерживаются следующие HTTP библиотеки:
requests(используется по умолчанию для синхронного API)httpx(синхронный и асинхронный API, используется по умолчанию для асинхронного API)aiohttp(асинхронный API)pycurl(синхронный API)
Для синхронного API (устанавливает requests):
pip install yadisk[sync-defaults]Для асинхронного API (устанавливает httpx и aiofiles):
pip install yadisk[async-defaults]Вы можете также вручную установить нужные библиотеки:
# Для использования совместно с pycurl
pip install yadisk[pycurl]
# Для использования совместно с aiohttp, также установит aiofiles
pip install yadisk[async-files,aiohttp]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"))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.
Release 3.4.0 (2025-07-10)
Нововведения:
Добавлены методы для управления настройками публичного доступа к ресурсам:
Client.update_public_settings()Client.get_public_settings()Client.get_public_available_settings()
Внимание: похоже, что эти эндпоинты не полностью соответствуют официальной документации REST API, их функциональность на практике ограничена.
Добавлен новый класс исключений
PasswordRequiredErrorДобавлено несколько новых полей
DiskInfoObject:deletion_restricion_dayshide_screenshots_in_photosliceis_legal_entity
Реализован метод
__dir__()для объектов ответов сервера
Улучшения:
repr()объектов ответов API теперь показывает только те ключи, которые фактически присутствуют (вместо отображения их значений какNone, как раньше)
Release 3.3.0 (2025-04-29)
- Нововведения:
- Спуфинг User-Agent для обхода ограничения скорости загрузки файлов на
Диск (см. PR #57).
Client.upload()и связанные с ним методы (включаяAsyncClient) имеют новый опциональный параметрspoof_user_agent, который по умолчанию имеет значениеTrue. Этот параметр можно использовать для отключения спуфинга, если это необходимо. - Добавлена поддержка pretty-printing в IPython для
YaDiskObjectи производных классов
- Спуфинг User-Agent для обхода ограничения скорости загрузки файлов на
Диск (см. PR #57).
- Исправления:
Client.wait_for_operation()теперь используетtime.monotonic()вместоtime.time()
- Улучшения:
- Сообщения об ошибках REST API теперь чётко разделены на четыре части (сообщение, описание, код ошибки и код состояния HTTP)
- Нововведения:
Release 3.2.0 (2025-02-03)
- Нововведения:
- Добавлен новый метод:
Client.makedirs()иAsyncClient.makedirs()(см. issue #53) - Добавлено несколько недостающих полей
DiskInfoObjectphotounlim_sizewill_be_overdrawnfree_photounlim_end_datepayment_flow
- Добавлено недостающее поле
sizesдляResourceObjectи связанных с ним объектов
- Добавлен новый метод:
- Исправления:
Client.rename()/AsyncClient.rename()теперь вызываетValueErrorпри попытке переименовать корневую папку- Номера автоматических повторных попыток логировались с ошибкой на единицу, теперь они логируются правильно
- Нововведения:
Release 3.1.0 (2024-07-12)
- Нововведения:
- Добавлены новые исключения:
GoneErrorиResourceDownloadLimitExceededError - Добавлен новый метод:
Client.get_all_public_resources()иAsyncClient.get_all_public_resources()
- Добавлены новые исключения:
- Исправления:
- Задание
headersи других опциональных параметров сессии какNoneбольше не вызывает ошибок - Исправлено неправильное поведение
Client.rename()иAsyncClient.rename()при указании пустого имени файла - Исправлено несколько опечаток в асинхронных реализациях
convenience-методов (
listdir()и аналогичных) - Исправлен неправильный тип данных у атрибута
itemsклассаPublicResourceListObject - Исправлены ошибки при отправке запросов API с помощью
PycURLSessionпри заданииstream=True - Данные не будут записаны в файл методами
Client.download(),Client.download_by_link(),AsyncClient.download()иAsyncClient.download_by_link(), если сервер вернул ошибочный код состояния
- Задание
- Нововведения:
Release 3.0.1 (2024-07-09)
- Исправлен сломанный
pyproject.toml, который не включал в сборку полное содержимое пакета (см. issue #49)
- Исправлен сломанный
Release 3.0.0 (2024-07-09)
- Несовместимые изменения:
- См. Руководство по миграции для подробностей
- Все методы теперь ожидают завершения асинхронных операций по умолчанию
(см. новый параметр
wait=<bool>) - Итерация по результату
AsyncClient.listdir()больше не требует дополнительного ключевого слова await - Число возвращаемых файлов
Client.get_files()/AsyncClient.get_files()теперь контролируется параметромmax_items, вместоlimit - Методы
set_token(),set_headers()интерфейсовSessionиAsyncSessionбыли удалены - Некоторые методы больше не принимают параметр
fields Client.get_last_uploaded()/AsyncClient.get_last_uploaded()теперь возвращает список вместо генератораyadisk.api- теперь скрытый модуль- Все скрытые модули были переименованы, их имена начинаются с
_(например,yadisk._api)
- Нововведения:
- Добавлены методы для ожидания завершения асинхронной операции (см.
Client.wait_for_operation()/AsyncClient.wait_for_operation()) - Методы, которые могут запускать асинхронную операцию, теперь принимают
дополнительные параметры:
wait: bool = True,poll_interval: float = 1.0иpoll_timeout: Optional[float] = None Client.listdir(),Client.get_files()и их асинхронные вариации теперь принимают новый параметрmax_items: Optional[int] = None, который может быть использован, чтобы ограничить максимальное число возвращаемых файлов- Большинство методов
ClientиAsyncClientтеперь принимаетretry_on: Optional[Tuple[Type[Exception], ...]] = None, который позволяет указывать кортеж из дополнительных исключений, которые могут вызвать автоматическую повторную попытку - Модуль
yadisk.types- теперь публичный - Добавлено логирование исходящих запросов к API и автоматических повторных попыток
- Объект логгера библиотеки доступен как
yadisk.settings.logger - Добавлен метод
YaDiskObject.field()и оператор@(YaDiskObject.__matmul__()), который удостоверяется, что указанное поле объекта не являетсяNone - Добавлены методы
Client.get_upload_link_object(),AsyncClient.get_upload_link_object(), возвращаемые значения которых дополнительно содержатoperation_id utils.auto_retry()теперь принимает больше параметров- Добавлено несколько недостающих полей
DiskInfoObject EXIFObjectтеперь содержит GPS-координатыCaseInsensitiveDict- теперь частьyadisk.utils
- Добавлены методы для ожидания завершения асинхронной операции (см.
- Улучшения:
- Добавлены полные подсказки типов для
ClientиAsyncClientс помощью файлов.pyi - Строки документации для
Client/AsyncClientтеперь включают в себя больше параметров - Ошибки во время обработки JSON (например,
InvalidResponseError) также вызывают автоматические повторные попытки - Сообщение об ошибке в случае, когда модуль сессии по умолчанию недоступен, теперь не вводит в заблуждение (см. issue #43)
- Уменьшено значение
limitдо500(было10000) дляClient.listdir()для избежания таймаутов при больших папках (см. issue #45) - Уменьшено значение
limitдо200(было1000) дляClient.get_files()для избежания таймаутов Client.download()и подобные методы больше не задают заголовокConnection: closeт.к. в этом нет необходимости (в отличие отClient.upload())UnknownYaDiskErrorтеперь включает код статуса в сообщение об ошибке
- Добавлены полные подсказки типов для
- Исправления:
- Исправлены реализации на основе
httpxиaiohttp: реализации методовResponse.json()/AsyncResponse.json()не преобразовывали свои исключения вRequestError - Исправлено: параметр
stream=Trueбыл не задан по умолчанию вAsyncClient.download(),AsyncClient.download_public()
- Исправлены реализации на основе
- Другие изменения:
typing_extensionsтеперь требуется для Python < 3.10
- Несовместимые изменения:
Release 2.1.0 (2024-01-03)
- Исправлен баг, из-за которого параметры в теле POST-запроса неправильно кодировались
- Исправлен баг в
PycURLSession.send_request(), из-за которого переданные заголовки игнорировались RequestsSession.close()теперь закрывает сессию для всех потоков- Все методы
ClientиAsyncClientтеперь используют существующую сессию - Удалены аттрибут
session_factoryи методmake_session()классовClientиAsyncClient - Класс сессии теперь может быть указан в качестве строки
(см.
Client/AsyncClient) - Добавлены методы
Client.get_device_code()/AsyncClient.get_device_code() - Добавлены методы
Client.get_token_from_device_code()/AsyncClient.get_token_from_device_code() - Добавлен недостающий параметр
redirect_uriдляClient.get_auth_url()/AsyncClient.get_auth_url()иClient.get_code_url()/AsyncClient.get_code_url() - Добавлена поддержка параметров PKCE для
Client.get_auth_url()/AsyncClient.get_auth_url(),Client.get_code_url()/AsyncClient.get_code_url()иClient.get_token()/AsyncClient.get_token() - Добавлен аттрибут
scopeдляTokenObject - Добавлены новые классы исключений:
InvalidClientError,InvalidGrantError,AuthorizationPendingError,BadVerificationCodeErrorиUnsupportedTokenTypeError
Release 2.0.0 (2023-12-12)
- Библиотека теперь предоставляет как синхронный, так и асинхронный API (см. Введение и Справочник API)
- Теперь поддерживается несколько HTTP библиотек (см. Доступные реализации сессий для полного списка)
- Теперь возможно добавить поддержку любой HTTP библиотеки (см. Интерфейс Session)
- requests - теперь опциональная зависимость (хотя всё ещё используется по умолчанию для синхронного API)
- Обратите внимание, что аргументы, специфичные для requests теперь передаются по другому (см. Доступные реализации сессий)
- Предпочитаемые HTTP библиотеки теперь должны быть установлены явным образом (см. Введение)
Client.upload()иClient.upload_by_link()теперь могут принимать функцию, возвращающую итератор (или генератор) в качестве полезной нагрузки
Release 1.3.4 (2023-10-15)
- Методы
upload()иdownload()(и связянные с ними) теперь могут загружать/скачивать файлы, не поддерживающие операциюseek()(например,stdinиstdout, при условии, что они открыты в режиме"rb"или"wb"), см. PR #31
- Методы
Release 1.3.3 (2023-04-22)
- Пути вида
app:/теперь работают правильно (см. issue #26)
- Пути вида
Release 1.3.2 (2023-03-20)
- Исправлено issue #29: TypeError: 'type' object is not subscriptable
Release 1.3.1 (2023-02-28)
- Исправлено issue #28:
TypeErrorпри вызовеdownload_public()с параметромpath - Исправлено
AttributeErrorпри вызовеResourceLinkObject.public_listdir()
- Исправлено issue #28:
Release 1.3.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были заменены более конкретными подклассами ConnectionErrorтеперь тоже вызывает повторную попытку
- Добавлены convenience-методы для объектов
Release 1.2.19 (2023-01-20)
- Исправлено неправильное поведение фикса из 1.2.18 для путей
disk:иtrash:.
- Исправлено неправильное поведение фикса из 1.2.18 для путей
Release 1.2.18 (2023-01-20)
- Исправлено issue #26: символ ':' в именах файлов приводит к
BadRequestError. Это поведение вызвано работой самого REST API Яндекс.Диска, но было исправлено на уровне библиотеки.
- Исправлено issue #26: символ ':' в именах файлов приводит к
Release 1.2.17 (2022-12-11)
- Исправлен баг, связанный с автоматическим закрытием сессии. Использование
метода
__del__()приводило в некоторых случаях к ошибкеReferenceError(ошибка игнорировалась, но сообщение выводилось). Баг проявляется по большей части в старых версиях Python (например 3.4).
- Исправлен баг, связанный с автоматическим закрытием сессии. Использование
метода
Release 1.2.16 (2022-08-17)
- Исправлен баг в
check_token(): функция могла вызватьForbiddenError, если у приложения недостатчно прав (issue #23).
- Исправлен баг в
Release 1.2.15 (2021-12-31)
- Исправлено: не распознавались ссылки на асинхронные операции, если они
использовали
http://(вместоhttps://). Иногда Яндекс.Диск может вернутьhttp://ссылку на асинхронную операцию. Теперь обе версии ссылок распознаются правильно, при этом, при получении информации об операции (черезget_operation_status()) всегда используетсяhttps://версия ссылки, даже если Яндекс.Диск вернулhttp://.
- Исправлено: не распознавались ссылки на асинхронные операции, если они
использовали
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) - Другие изменения информации о пакете
- Изменена лицензия на LGPLv3 (см.
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)
- Первый релиз