Changelog
Release 3.4.1 (2026-04-16)
Bug fixes:
Fixed a
TypeErrorwhen passing a file path toAsyncClient.download()orAsyncClient.upload()while not havingaiofilesinstalled (see issue #62)Work around Yandex.Disk ignoring request body for
Client.patch()andClient.update_public_settings()when usingpycurldue to settingTransfer-Encoding: chunkedby default
Release 3.4.0 (2025-07-10)
New features:
Added methods for managing public settings of resources:
Note, it appears that these API endpoints do not fully conform to the official REST API documentation, their functionality is limited in practice.
Added new exception class
PasswordRequiredErrorAdded several new fields for
DiskInfoObject:deletion_restricion_dayshide_screenshots_in_photosliceis_legal_entity
Implemented the
__dir__()method for response objects
Improvements:
repr()of API response objects now only shows the keys that are actually present (instead of displaying them asNonelike before)
Release 3.3.0 (2025-04-29)
New features:
User-Agent spoofing to bypass Yandex.Disk’s upload speed limit (see PR #57).
Client.upload()and related methods (includingAsyncClient) have a new optional parameterspoof_user_agent, which is set toTrueby default. This parameter can be used to disable User-Agent spoofing if necessary.Added IPython’s pretty printing support for
YaDiskObjectand derived classes
Bug fixes:
Client.wait_for_operation()now usestime.monotonic()instead oftime.time()
Improvements:
REST API error messages are now clearly divided into four parts (message, description, error code and HTTP status code)
Release 3.2.0 (2025-02-03)
New features:
Added new method:
Client.makedirs()/AsyncClient.makedirs()(see issue #53)Added several missing fields for
DiskInfoObject:photounlim_sizewill_be_overdrawnfree_photounlim_end_datepayment_flow
Added missing field
sizesforResourceObjectand related objects
Bug fixes:
Client.rename()/AsyncClient.rename()now raisesValueErroron attempt to rename the root directoryAutomatic retry attempt numbers were logged off by one, now they are logged correctly
Release 3.1.0 (2024-07-12)
New features:
Added new exception classes:
GoneErrorandResourceDownloadLimitExceededErrorAdded a new method:
Client.get_all_public_resources()andAsyncClient.get_all_public_resources()
Bug fixes:
Fixed setting
headersand session arguments toNonecausing errorsFixed incorrect handling of empty filename in
Client.rename()andAsyncClient.rename()Fixed several typos in async convenience method implementations (
listdir()and related)Fixed
PublicResourceListObjecthaving the wrong type for itsitemsmemberFixed API requests not working with
PycURLSessionwhenstream=Trueis setNo data will be written to the output file by
Client.download(),Client.download_by_link(),AsyncClient.download()andAsyncClient.download_by_link()if the server returns a bad status code
Release 3.0.1 (2024-07-09)
Fixed broken
pyproject.tomlthat did not include full package contents (see issue #49)
Release 3.0.0 (2024-07-09)
Breaking changes:
See Migration Guide for full details
All methods wait for asynchronous operations to complete by default (see the new
wait=<bool>parameter)Iterating over the result of
AsyncClient.listdir()no longer requires the additional await keyword.Number of returned items of
Client.get_files()/AsyncClient.get_files()is now controlled by themax_itemsparameter, rather thanlimitMethods
set_token(),set_headers()ofSessionandAsyncSessionwere removedSome methods no longer accept the
fieldsparameterClient.get_last_uploaded()/AsyncClient.get_last_uploaded()now return a list instead of a generatoryadisk.apiis now a private moduleAll private modules were renamed to have names that start with
_(e.g,yadisk._api)
New features:
Added methods to wait until an asynchronous operation completes (see
Client.wait_for_operation()/AsyncClient.wait_for_operation())Methods that may start an asynchronous operation now accept additional parameters:
wait: bool = True,poll_interval: float = 1.0andpoll_timeout: Optional[float] = NoneClient.listdir(),Client.get_files()and their async variants now accept a new parametermax_items: Optional[int] = None, which can be used to limit the maximum number of returned itemsMost
ClientandAsyncClientmethods now accept an optional parameterretry_on: Optional[Tuple[Type[Exception], ...]] = None, which lets you specify a tuple of additional exceptions that can trigger an automatic retryyadisk.typesmodule is now publicAdded basic logging of outgoing API requests and automatic retries
The logger instance for the library can be accessed as
yadisk.settings.loggerAdded
YaDiskObject.field()and the@operator (YaDiskObject.__matmul__()) which verify that the given field is notNoneAdded
Client.get_upload_link_object(),AsyncClient.get_upload_link_object()whose return values additionally containoperation_idutils.auto_retry()now accepts more parametersAdded a few missing fields for
DiskInfoObjectEXIFObjectnow contains GPS coordinatesCaseInsensitiveDictis now part ofyadisk.utils
Improvements:
Added full type hints for
Client,AsyncClientthrough.pyistub filesDocstrings for
Client/AsyncClientnow include more parametersErrors during JSON processing (e.g.
InvalidResponseError) also trigger automatic retriesError message when the default session module is not available is now less confusing (see issue #43)
Reduced
Client.listdir()’s defaultlimitto500from10000to avoid timeouts on large directories (see issue #45)Reduced
Client.get_files()’s defaultlimitto200from1000to avoid timeoutsClient.download()and similar methods no longer setConnection: closeheader, since it’s not necessary (unlike withClient.upload())UnknownYaDiskErrornow includes status code in the error message
Bug fixes:
Fixed
httpx- andaiohttp-based session implementations not converting their exceptions toRequestErrorin theirResponse.json()/AsyncResponse.json()implementationsFixed
stream=Truenot being set by default inAsyncClient.download(),AsyncClient.download_public()
Other changes:
typing_extensionsis now required for Python < 3.10
Release 2.1.0 (2024-01-03)
Fixed a bug where POST request parameters were not encoded correctly
Fixed a bug in
PycURLSession.send_request()that made it ignore passed headersRequestsSession.close()now closes all underlying session instances, instead of only the current thread-local oneAll methods of
ClientandAsyncClientnow use existing sessionRemoved
session_factoryattribute andmake_session()method ofClientandAsyncClientSession class can now be specified as a string (see
Client/AsyncClient)Added
Client.get_device_code()/AsyncClient.get_device_code()methodsAdded
Client.get_token_from_device_code()/AsyncClient.get_token_from_device_code()methodsAdded missing
redirect_uriparameter forClient.get_auth_url()/AsyncClient.get_auth_url()andClient.get_code_url()/AsyncClient.get_code_url()Added support for PKCE parameters for
Client.get_auth_url()/AsyncClient.get_auth_url(),Client.get_code_url()/AsyncClient.get_code_url()andClient.get_token()/AsyncClient.get_token()Added
scopeattribute forTokenObjectAdded new exception classes:
InvalidClientError,InvalidGrantError,AuthorizationPendingError,BadVerificationCodeErrorandUnsupportedTokenTypeError
Release 2.0.0 (2023-12-12)
The library now provides both synchronous and asynchronous APIs (see Introduction and API Reference)
Multiple HTTP libraries are supported by default (see Available Session Implementations for the full list)
It is now possible to add support for any HTTP library (see Session Interface)
requests is now an optional dependency (although it’s still used by default for synchronous API)
Note that now requests-specific arguments must be passed differently (see Available Session Implementations)
Preferred HTTP client libraries must be explicitly installed now (see Introduction)
Client.upload()andClient.upload_by_link()can now accept a function that returns an iterator (or a generator) as a payload
Release 1.3.4 (2023-10-15)
upload() and download() (and related) methods can now upload/download non-seekable file-like objects (e.g. stdin or stdout when open in binary mode), see PR #31
Release 1.3.3 (2023-04-22)
app:/ paths now work correctly (see issue #26)
Release 1.3.2 (2023-03-20)
Fixed issue #29: TypeError: ‘type’ object is not subscriptable
Release 1.3.1 (2023-02-28)
Fixed issue #28: calling download_public() with path keyword argument raises TypeError
Fixed AttributeError raised when calling ResourceLinkObject.public_listdir()
Release 1.3.0 (2023-01-30)
Added convenience methods to …Object objects (e.g. see ResourceObject)
Added type hints
Improved error checking and response validation
Added InvalidResponseError, PayloadTooLargeError, UploadTrafficLimitExceededError
Added a few missing fields to DiskInfoObject and SystemFoldersObject
Added rename(), upload_by_link() and download_by_link() methods
Added default_args field for YaDisk object
download() and upload() now return ResourceLinkObject
Returned LinkObject instances have been replaced by more specific subclasses
ConnectionErrornow also triggers a retry
Release 1.2.19 (2023-01-20)
Fixed incorrect behavior of the fix from 1.2.18 for paths disk: and trash: (only these two).
Release 1.2.18 (2023-01-20)
Fixed issue #26: ‘:’ character in filenames causes BadRequestError. This is due the behavior of Yandex.Disk’s REST API itself but is avoided on the library level with this fix.
Release 1.2.17 (2022-12-11)
Fixed a minor bug which could cause a ReferenceError (which would not cause a crash, but still show an error message). The bug involved using __del__() method in SelfDestructingSession to automatically close the sessions it seems to affect primarily old Python versions (such as 3.4).
Release 1.2.16 (2022-08-17)
Fixed a bug in check_token(): could throw ForbiddenError if the application lacks necessary permissions (issue #23).
Release 1.2.15 (2021-12-31)
Fixed an issue where http:// links were not recognized as operation links (they were assumed to always be https://, since all the other requests are always HTTPS). Occasionally, Yandex.Disk can for some reason return an http:// link to an asynchronous operation instead of https://. Both links are now recognized correctly and an https:// version will always be used by get_operation_status(), regardless of which one Yandex.Disk returned.
Release 1.2.14 (2019-03-26)
Fixed a TypeError in get_public_* functions when passing path parameter (see issue #7)
Added unlimited_autoupload_enabled attribute for DiskInfoObject
Release 1.2.13 (2019-02-23)
Added md5 parameter for remove()
Added UserPublicInfoObject
Added country attribute for UserObject
Added photoslice_time attribute for ResourceObject, PublicResourceObject and TrashResourceObject
Release 1.2.12 (2018-10-11)
Fixed fields parameter not working properly in listdir() (issue #4)
Release 1.2.11 (2018-06-30)
Added the missing parameter sort for get_meta()
Added file and antivirus_status attributes for ResourceObject, PublicResourceObject and TrashResourceObject
Added headers parameter
Fixed a typo in download() and download_public() (issue #2)
Removed *args parameter everywhere
Release 1.2.10 (2018-06-14)
Fixed timeout=None behavior. None is supposed to mean ‘no timeout’ but in the older versions it was synonymous with the default timeout.
Release 1.2.9 (2018-04-28)
Changed the license to LGPLv3 (see COPYING and COPYING.lesser)
Other package info updates
Release 1.2.8 (2018-04-17)
Fixed a couple of typos: PublicResourceListObject.items and TrashResourceListObject.items had wrong types
Substitute field aliases in fields parameter when performing API requests (e.g. embedded -> _embedded)
Release 1.2.7 (2018-04-15)
Fixed a file rewinding bug when uploading/downloading files after a retry
Release 1.2.6 (2018-04-13)
Now caching requests sessions so that open connections can be reused (which can significantly speed things up sometimes)
Disable keep-alive when uploading/downloading files by default
Release 1.2.5 (2018-03-31)
Fixed an off-by-one bug in utils.auto_retry() (which could sometimes result in AttributeError)
Retry the whole request for upload(), download() and download_public()
Set stream=True for download() and download_public()
Other minor fixes
Release 1.2.4 (2018-02-19)
Fixed TokenObject having exprires_in instead of expires_in (fixed a typo)
Release 1.2.3 (2018-01-20)
Fixed a TypeError when WrongResourceTypeError is raised
Release 1.2.2 (2018-01-19)
refresh_token() no longer requires a valid or empty token.
Release 1.2.1 (2018-01-14)
Fixed auto retries not working. Whoops.
Release 1.2.0 (2018-01-14)
Fixed passing n_retries=0 to upload(), download() and download_public()
upload(), download() and download_public() no longer return anything (see the docs)
Added utils module (see the docs)
Added RetriableYaDiskError, WrongResourceTypeError, BadGatewayError and GatewayTimeoutError
listdir() now raises WrongResourceTypeError instead of NotADirectoryError
Release 1.1.1 (2017-12-29)
Fixed argument handling in upload(), download() and download_public(). Previously, passing n_retries and retry_interval would raise an exception (TypeError).
Release 1.1.0 (2017-12-27)
Better exceptions (see the docs)
Added support for force_async parameter
Minor bug fixes
Release 1.0.8 (2017-11-29)
Fixed yet another listdir() bug
Release 1.0.7 (2017-11-04)
Added install_requires argument to setup.py
Release 1.0.6 (2017-11-04)
Return OperationLinkObject in some functions
Release 1.0.5 (2017-10-29)
Fixed setup.py to exclude tests
Release 1.0.4 (2017-10-23)
Fixed bugs in upload, download and listdir functions
Set default listdir limit to 10000
Release 1.0.3 (2017-10-22)
Added settings
Release 1.0.2 (2017-10-19)
Fixed get_code_url function (added missing parameters)
Release 1.0.1 (2017-10-18)
Fixed a major bug in GetTokenRequest (added missing parameter)
Release 1.0.0 (2017-10-18)
Initial release