yadisk


Nameyadisk JSON
Version 3.0.1 PyPI version JSON
download
home_pageNone
SummaryБиблиотека-клиент REST API Яндекс.Диска / Yandex.Disk REST API client library
upload_time2024-07-09 17:51:10
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseLGPLv3
keywords yandex.disk yandex rest
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            YaDisk
======

.. |RTD Badge| image:: https://img.shields.io/readthedocs/yadisk.svg
   :alt: Read the Docs
   :target: https://yadisk.readthedocs.io/en/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

|RTD Badge| |CI Badge| |PyPI Badge| |Python Version 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)`_.

Установка
*********

: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"))

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

.. _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
.. _Введение: 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

* **Release 3.0.1 (2024-07-09)**

  * Исправлен сломанный :code:`pyproject.toml`, который не включал в сборку
    полное содержимое пакета (см. `issue #49`_)

* **Release 3.0.0 (2024-07-09)**

  * Несовместимые изменения:

    - См. `Руководство по миграции`_ для подробностей
    - Все методы теперь ожидают завершения асинхронных операций по умолчанию
      (см. новый параметр :code:`wait=<bool>`)
    - Итерация по результату :code:`AsyncClient.listdir()` больше не требует
      дополнительного ключевого слова await
    - Число возвращаемых файлов :code:`Client.get_files()` /
      :code:`AsyncClient.get_files()` теперь контролируется параметром
      :code:`max_items`, вместо :code:`limit`
    - Методы :code:`set_token()`, :code:`set_headers()` интерфейсов
      :code:`Session` и :code:`AsyncSession` были удалены
    - Некоторые методы больше не принимают параметр :code:`fields`
    - :code:`Client.get_last_uploaded()` /
      :code:`AsyncClient.get_last_uploaded()` теперь возвращает список вместо
      генератора
    - :code:`yadisk.api` - теперь скрытый модуль
    - Все скрытые модули были переименованы, их имена начинаются с :code:`_`
      (например, :code:`yadisk._api`)
  * Нововведения:

    - Добавлены методы для ожидания завершения асинхронной операции (см.
      :code:`Client.wait_for_operation()` /
      :code:`AsyncClient.wait_for_operation()`)
    - Методы, которые могут запускать асинхронную операцию, теперь принимают
      дополнительные параметры: :code:`wait: bool = True`,
      :code:`poll_interval: float = 1.0` и
      :code:`poll_timeout: Optional[float] = None`
    - :code:`Client.listdir()`, :code:`Client.get_files()` и их асинхронные
      вариации теперь принимают новый параметр :code:`max_items: Optional[int] =
      None`, который может быть использован, чтобы ограничить максимальное число
      возвращаемых файлов
    - Большинство методов :code:`Client` и :code:`AsyncClient` теперь принимает
      :code:`retry_on: Optional[Tuple[Type[Exception], ...]] = None`, который
      позволяет указывать кортеж из дополнительных исключений, которые могут вызвать
      автоматическую повторную попытку
    - Модуль :code:`yadisk.types` - теперь публичный
    - Добавлено логирование исходящих запросов к API и автоматических
      повторных попыток
    - Объект логгера библиотеки доступен как :code:`yadisk.settings.logger`
    - Добавлен метод :code:`YaDiskObject.field()` и оператор :code:`@`
      (:code:`YaDiskObject.__matmul__()`), который удостоверяется, что указанное
      поле объекта не является :code:`None`
    - Добавлены методы :code:`Client.get_upload_link_object()`,
      :code:`AsyncClient.get_upload_link_object()`, возвращаемые значения которых
      дополнительно содержат :code:`operation_id`
    - :code:`utils.auto_retry()` теперь принимает больше параметров
    - Добавлено несколько недостающих полей :code:`DiskInfoObject`
    - :code:`EXIFObject` теперь содержит GPS-координаты
    - :code:`CaseInsensitiveDict` - теперь часть :code:`yadisk.utils`
  * Улучшения:

    - Добавлены полные подсказки типов для :code:`Client` и :code:`AsyncClient` с
      помощью файлов :code:`.pyi`
    - Строки документации для :code:`Client` / :code:`AsyncClient` теперь
      включают в себя больше параметров
    - Ошибки во время обработки JSON (например, :code:`InvalidResponseError`)
      также вызывают автоматические повторные попытки
    - Сообщение об ошибке в случае, когда модуль сессии по умолчанию
      недоступен, теперь не вводит в заблуждение (см. `issue #43`_)
    - Уменьшено значение :code:`limit` до :code:`500` (было :code:`10000`)
      для :code:`Client.listdir()` для избежания таймаутов при больших папках
      (см. `issue #45`_)
    - Уменьшено значение :code:`limit` до :code:`200` (было :code:`1000`)
      для :code:`Client.get_files()` для избежания таймаутов
    - :code:`Client.download()` и подобные методы больше не задают заголовок
      :code:`Connection: close` т.к. в этом нет необходимости (в отличие от
      :code:`Client.upload()`)
    - :code:`UnknownYaDiskError` теперь включает код статуса в сообщение об
      ошибке
  * Исправления:

    - Исправлены реализации на основе :code:`httpx` и :code:`aiohttp`:
      реализации методов :code:`Response.json()` / :code:`AsyncResponse.json()`
      не преобразовывали свои исключения в :code:`RequestError`
    - Исправлено: параметр :code:`stream=True` был не задан по умолчанию в
      :code:`AsyncClient.download()`, :code:`AsyncClient.download_public()`
  * Другие изменения:

    - :code:`typing_extensions` теперь требуется для Python < 3.10

* **Release 2.1.0 (2024-01-03)**

  * Исправлен баг, из-за которого параметры в теле POST-запроса неправильно кодировались
  * Исправлен баг в :code:`PycURLSession.send_request()`, из-за которого
    переданные заголовки игнорировались
  * :code:`RequestsSession.close()` теперь закрывает сессию для всех потоков
  * Все методы :code:`Client` и :code:`AsyncClient` теперь используют
    существующую сессию
  * Удалены аттрибут :code:`session_factory` и метод :code:`make_session()`
    классов :code:`Client` и :code:`AsyncClient`
  * Класс сессии теперь может быть указан в качестве строки
    (см. :code:`Client`/:code:`AsyncClient`)
  * Добавлены методы :code:`Client.get_device_code()`/:code:`AsyncClient.get_device_code()`
  * Добавлены методы :code:`Client.get_token_from_device_code()`/:code:`AsyncClient.get_token_from_device_code()`
  * Добавлен недостающий параметр :code:`redirect_uri` для
    :code:`Client.get_auth_url()`/:code:`AsyncClient.get_auth_url()` и
    :code:`Client.get_code_url()`/:code:`AsyncClient.get_code_url()`
  * Добавлена поддержка параметров PKCE для
    :code:`Client.get_auth_url()`/:code:`AsyncClient.get_auth_url()`,
    :code:`Client.get_code_url()`/:code:`AsyncClient.get_code_url()` и
    :code:`Client.get_token()`/:code:`AsyncClient.get_token()`
  * Добавлен аттрибут :code:`scope` для :code:`TokenObject`
  * Добавлены новые классы исключений: :code:`InvalidClientError`,
    :code:`InvalidGrantError`, :code:`AuthorizationPendingError`,
    :code:`BadVerificationCodeError` и :code:`UnsupportedTokenTypeError`

* **Release 2.0.0 (2023-12-12)**

  * Библиотека теперь предоставляет как синхронный, так и асинхронный API
    (см. `Введение`_ и `Справочник API`_)
  * Теперь поддерживается несколько HTTP библиотек (см.
    `Доступные реализации сессий`_ для полного списка)
  * Теперь возможно добавить поддержку любой HTTP библиотеки
    (см. `Интерфейс Session`_)
  * `requests`_ - теперь опциональная зависимость (хотя всё ещё используется
    по умолчанию для синхронного API)
  * Обратите внимание, что аргументы, специфичные для requests теперь передаются
    по другому (см. `Доступные реализации сессий`_)
  * Предпочитаемые HTTP библиотеки теперь должны быть установлены явным образом
    (см. `Введение`_)
  * :code:`Client.upload()` и :code:`Client.upload_by_link()` теперь могут
    принимать функцию, возвращающую итератор (или генератор) в качестве полезной
    нагрузки

* **Release 1.3.4 (2023-10-15)**

  * Методы :code:`upload()` и :code:`download()` (и связянные с ними) теперь
    могут загружать/скачивать файлы, не поддерживающие операцию :code:`seek()`
    (например, :code:`stdin` и :code:`stdout`, при условии, что они открыты в
    режиме :code:`"rb"` или :code:`"wb"`), см. `PR #31`_

* **Release 1.3.3 (2023-04-22)**

  * Пути вида :code:`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`_: :code:`TypeError` при вызове :code:`download_public()` с параметром :code:`path`
  * Исправлено :code:`AttributeError` при вызове :code:`ResourceLinkObject.public_listdir()`

* **Release 1.3.0 (2023-01-30)**

  * Добавлены convenience-методы для объектов :code:`...Object` (например, см. :code:`ResourceObject`)
  * Добавлены подсказки типов (type hints)
  * Улучшены проверки ошибок и проверка ответа
  * Добавлены :code:`InvalidResponseError`, :code:`PayloadTooLargeError`, :code:`UploadTrafficLimitExceededError`
  * Добавлено несколько недостающих полей объектов :code:`DiskInfoObject` и :code:`SystemFoldersObject`
  * Добавлены методы :code:`rename()`, :code:`upload_by_link()` и :code:`download_by_link()`
  * Добавлен аттрибут :code:`default_args` объекта :code:`YaDisk`
  * :code:`download()` и :code:`upload()` теперь возвращают :code:`ResourceLinkObject`
  * До этого возвращаемые объекты :code:`LinkObject` были заменены более конкретными подклассами
  * :code:`ConnectionError` теперь тоже вызывает повторную попытку

* **Release 1.2.19 (2023-01-20)**

  * Исправлено неправильное поведение фикса из 1.2.18 для путей :code:`disk:`
    и :code:`trash:`.

* **Release 1.2.18 (2023-01-20)**

  * Исправлено `issue #26`_: символ ':' в именах файлов приводит к
    :code:`BadRequestError`. Это поведение вызвано работой самого REST API
    Яндекс.Диска, но было исправлено на уровне библиотеки.

* **Release 1.2.17 (2022-12-11)**

  * Исправлен баг, связанный с автоматическим закрытием сессии. Использование
    метода :code:`__del__()` приводило в некоторых случаях к ошибке
    :code:`ReferenceError` (ошибка игнорировалась, но сообщение выводилось).
    Баг проявляется по большей части в старых версиях Python (например 3.4).

* **Release 1.2.16 (2022-08-17)**

  * Исправлен баг в :code:`check_token()`: функция могла вызвать :code:`ForbiddenError`,
    если у приложения недостатчно прав (`issue #23`_).

* **Release 1.2.15 (2021-12-31)**

  * Исправлено: не распознавались ссылки на асинхронные операции, если они
    использовали :code:`http://` (вместо :code:`https://`).
    Иногда Яндекс.Диск может вернуть :code:`http://` ссылку на асинхронную
    операцию. Теперь обе версии ссылок распознаются правильно, при этом,
    при получении информации об операции (через :code:`get_operation_status()`)
    всегда используется :code:`https://` версия ссылки, даже если Яндекс.Диск
    вернул :code:`http://`.

* **Release 1.2.14 (2019-03-26)**

  * Исправлена ошибка :code:`TypeError` в функциях :code:`get_public_*` при
    использовании с параметром :code:`path` (`issue #7`_)
  * Добавлен аттрибут :code:`unlimited_autoupload_enabled` для :code:`DiskInfoObject`

* **Release 1.2.13 (2019-02-23)**

  * Добавлен :code:`md5` параметр для :code:`remove()`
  * Добавлен :code:`UserPublicInfoObject`
  * Добавлен аттрибут :code:`country` для :code:`UserObject`
  * Добавлен аттрибут :code:`photoslice_time` для :code:`ResourceObject`, :code:`PublicResourceObject`
    и :code:`TrashResourceObject`

* **Release 1.2.12 (2018-10-11)**

  * Исправлен баг: не работает параметр `fields` в `listdir()` (`issue #4`_)

* **Release 1.2.11 (2018-06-30)**

  * Добавлен недостающий параметр :code:`sort` для :code:`get_meta()`
  * Добавлены аттрибуты :code:`file` и :code:`antivirus_status` для :code:`ResourceObject`,
    :code:`PublicResourceObject` и :code:`TrashResourceObject`
  * Добавлен параметр :code:`headers`
  * Исправлена опечатка в :code:`download()` и :code:`download_public()` (`issue #2`_)
  * Убран параметр :code:`*args`

* **Release 1.2.10 (2018-06-14)**

  * Исправлено поведение :code:`timeout=None`. :code:`None` должен означать „без таймаута“,
    но в предыдущих версиях значение :code:`None` было синонимично со стандартным таймаутом.

* **Release 1.2.9 (2018-04-28)**

  * Изменена лицензия на LGPLv3 (см. :code:`COPYING` и :code:`COPYING.lesser`)
  * Другие изменения информации о пакете

* **Release 1.2.8 (2018-04-17)**

  * Исправлено несколько опечаток: у :code:`PublicResourceListObject.items` и
    :code:`TrashResourceListObject.items` были неправильные типы данных
  * Псевдонимы полей в параметре :code:`fields` заменяются при выполнении
    запросов API (например, :code:`embedded` -> :code:`_embedded`)

* **Release 1.2.7 (2018-04-15)**

  * Исправлен баг перемотки файла при загрузке/скачивании после повторной попытки

* **Release 1.2.6 (2018-04-13)**

  * Теперь объекты сессий :code:`requests` кэшируются, чтобы их можно
    было переиспользовать (иногда может существенно ускорить выполнение запросов)
  * :code:`keep-alive` отключается при загрузке/скачивании файлов по умолчанию

* **Release 1.2.5 (2018-03-31)**

  * Исправлен баг (ошибка на единицу) в :code:`utils.auto_retry()` (иногда мог вызвать :code:`AttributeError`)
  * Повторные попытки применяются для :code:`upload()`, :code:`download()` и :code:`download_public()` целиком
  * Задано :code:`stream=True` для :code:`download()` и :code:`download_public()`
  * Другие мелкие исправления

* **Release 1.2.4 (2018-02-19)**

  * Исправлена опечатка (:code:`TokenObject.exprires_in` -> :code:`TokenObject.expires_in`)

* **Release 1.2.3 (2018-01-20)**

  * Исправлено :code:`TypeError` при вызове :code:`WrongResourceTypeError`

* **Release 1.2.2 (2018-01-19)**

  * :code:`refresh_token()` больше не требует валидный или пустой токен.

* **Release 1.2.1 (2018-01-14)**

  * Исправлена неработоспособность повторных попыток.

* **Release 1.2.0 (2018-01-14)**

  * Исправлено использование :code:`n_retries=0` в :code:`upload()`, :code:`download()` и :code:`download_public()`
  * :code:`upload()`, :code:`download()` и :code:`download_public()` больше не возвращают ничего (см. документацию)
  * Добавлен модуль :code:`utils` (см. документацию)
  * Добавлены :code:`RetriableYaDiskError`, :code:`WrongResourceTypeError`, :code:`BadGatewayError` и :code:`GatewayTimeoutError`
  * :code:`listdir()` теперь вызывает :code:`WrongResourceTypeError` вместо :code:`NotADirectoryError`

* **Release 1.1.1 (2017-12-29)**

  * Исправлена обработка аргументов в :code:`upload()`, :code:`download()` и :code:`download_public()`.
    До этого использование :code:`n_retries` и :code:`retry_interval` вызывало исключение (:code:`TypeError`).

* **Release 1.1.0 (2017-12-27)**

  * Усовершенствованные исключения (см. документацию)
  * Добавлена поддержка параметра :code:`force_async`
  * Мелкие исправления багов

* **Release 1.0.8 (2017-11-29)**

  * Исправлен ещё один баг в :code:`listdir()`

* **Release 1.0.7 (2017-11-04)**

  * Добавлен :code:`install_requires` в :code:`setup.py`

* **Release 1.0.6 (2017-11-04)**

  * Некоторые функции теперь возвращают :code:`OperationLinkObject`

* **Release 1.0.5 (2017-10-29)**

  * Исправлен :code:`setup.py`, теперь исключает тесты

* **Release 1.0.4 (2017-10-23)**

  * Исправлены баги в :code:`upload`, :code:`download` и :code:`listdir`
  * Значение по-умолчанию :code:`limit` в :code:`listdir` установлено в :code:`10000`

* **Release 1.0.3 (2017-10-22)**

  * Добавлен модуль :code:`settings`

* **Release 1.0.2 (2017-10-19)**

  * Исправлена функция :code:`get_code_url` (добавлены недостающие параметры)

* **Release 1.0.1 (2017-10-18)**

  * Исправлен серьёзный баг в :code:`GetTokenRequest` (добавлен недостающий параметр)

* **Release 1.0.0 (2017-10-18)**

  * Первый релиз

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "yadisk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "yandex.disk, yandex, rest",
    "author": null,
    "author_email": "Ivan Konovalov <ivknv0@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/ac/e5/7c0c0b47ca49032f6cc4ff037196bc2909598f932eea3edd84d8de251292/yadisk-3.0.1.tar.gz",
    "platform": null,
    "description": "YaDisk\n======\n\n.. |RTD Badge| image:: https://img.shields.io/readthedocs/yadisk.svg\n   :alt: Read the Docs\n   :target: https://yadisk.readthedocs.io/en/latest/\n\n.. |CI Badge| image:: https://img.shields.io/github/actions/workflow/status/ivknv/yadisk/lint_and_test.yml\n   :alt: GitHub Actions Workflow Status\n\n.. |PyPI Badge| image:: https://img.shields.io/pypi/v/yadisk.svg\n   :alt: PyPI\n   :target: https://pypi.org/project/yadisk\n\n.. |Python Version Badge| image:: https://img.shields.io/pypi/pyversions/yadisk\n   :alt: PyPI - Python Version\n\n|RTD Badge| |CI Badge| |PyPI Badge| |Python Version Badge|\n\n.. _English version of this document: https://github.com/ivknv/yadisk/blob/master/README.en.rst\n\n`English version of this document`_\n\nYaDisk - \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u043a\u043b\u0438\u0435\u043d\u0442 REST API \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a\u0430.\n\n.. _Read the Docs (EN): https://yadisk.readthedocs.io\n.. _Read the Docs (RU): https://yadisk.readthedocs.io/ru/latest\n\n\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 `Read the Docs (RU)`_ \u0438 `Read the Docs (EN)`_.\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n*********\n\n:code:`yadisk` \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e HTTP \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439,\n\u0442\u0430\u043a \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API.\n\n\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 HTTP \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\n\n* :code:`requests` (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API)\n* :code:`httpx` (\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API)\n* :code:`aiohttp` (\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API)\n* :code:`pycurl` (\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API)\n\n\u0414\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API (\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 :code:`requests`):\n\n.. code:: bash\n\n    pip install yadisk[sync_defaults]\n\n\u0414\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API (\u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 :code:`httpx` \u0438 :code:`aiofiles`):\n\n.. code:: bash\n\n   pip install yadisk[async_defaults]\n\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\n\n.. code:: bash\n\n   # \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 pycurl\n   pip install yadisk[pycurl]\n\n   # \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 aiohttp, \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 aiofiles\n   pip install yadisk[async_files,aiohttp]\n\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b\n*******\n\n\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API\n--------------\n\n.. code:: python\n\n    import yadisk\n\n    client = yadisk.Client(token=\"<\u0442\u043e\u043a\u0435\u043d>\")\n    # \u0438\u043b\u0438\n    # client = yadisk.Client(\"<id-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f>\", \"<secret-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f>\", \"<\u0442\u043e\u043a\u0435\u043d>\")\n\n    # \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e with, \u043b\u0438\u0431\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u044b\u0437\u0432\u0430\u0442\u044c client.close() \u0432 \u043a\u043e\u043d\u0446\u0435\n    with client:\n        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043b\u0438 \u0442\u043e\u043a\u0435\u043d\n        print(client.check_token())\n\n        # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u0438\u0441\u043a\u0435\n        print(client.get_disk_info())\n\n        # \u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \"/some/path\"\n        print(list(client.listdir(\"/some/path\")))\n\n        # \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \"file_to_upload.txt\" \u0432 \"/destination.txt\"\n        client.upload(\"file_to_upload.txt\", \"/destination.txt\")\n\n        # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435\n        with open(\"file_to_upload.txt\", \"rb\") as f:\n            client.upload(f, \"/destination.txt\")\n\n        # \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \"/some-file-to-download.txt\" \u0432 \"downloaded.txt\"\n        client.download(\"/some-file-to-download.txt\", \"downloaded.txt\")\n\n        # \u0411\u0435\u0437\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \"/file-to-remove\"\n        client.remove(\"/file-to-remove\", permanently=True)\n\n        # \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \"/test-dir\"\n        print(client.mkdir(\"/test-dir\"))\n\n\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API\n---------------\n\n.. code:: python\n\n    import yadisk\n    import aiofiles\n\n    client = yadisk.AsyncClient(token=\"<token>\")\n    # \u0438\u043b\u0438\n    # client = yadisk.AsyncClient(\"<application-id>\", \"<application-secret>\", \"<token>\")\n\n    # \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e with, \u043b\u0438\u0431\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u044b\u0437\u0432\u0430\u0442\u044c client.close() \u0432 \u043a\u043e\u043d\u0446\u0435\n    async with client:\n        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432\u0430\u043b\u0438\u0434\u0435\u043d \u043b\u0438 \u0442\u043e\u043a\u0435\u043d\n        print(await client.check_token())\n\n        # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0434\u0438\u0441\u043a\u0435\n        print(await client.get_disk_info())\n\n        # \u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \"/some/path\"\n        print([i async for i in client.listdir(\"/some/path\")])\n\n        # \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \"file_to_upload.txt\" \u0432 \"/destination.txt\"\n        await client.upload(\"file_to_upload.txt\", \"/destination.txt\")\n\n        # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435\n        async with aiofiles.open(\"file_to_upload.txt\", \"rb\") as f:\n            await client.upload(f, \"/destination.txt\")\n\n        # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438\n        with open(\"file_to_upload.txt\", \"rb\") as f:\n            await client.upload(f, \"/destination.txt\")\n\n        # \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \"/some-file-to-download.txt\" \u0432 \"downloaded.txt\"\n        await client.download(\"/some-file-to-download.txt\", \"downloaded.txt\")\n\n        # \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435\n        async with aiofiles.open(\"downloaded.txt\", \"wb\") as f:\n            await client.download(\"/some-file-to-download.txt\", f)\n\n        # \u0411\u0435\u0437\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \"/file-to-remove\"\n        await client.remove(\"/file-to-remove\", permanently=True)\n\n        # \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \"/test-dir\"\n        print(await client.mkdir(\"/test-dir\"))\n\n\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439\n*****************\n\n.. _issue #2: https://github.com/ivknv/yadisk/issues/2\n.. _issue #4: https://github.com/ivknv/yadisk/issues/4\n.. _issue #7: https://github.com/ivknv/yadisk/issues/7\n.. _issue #23: https://github.com/ivknv/yadisk/issues/23\n.. _issue #26: https://github.com/ivknv/yadisk/issues/26\n.. _issue #28: https://github.com/ivknv/yadisk/issues/28\n.. _issue #29: https://github.com/ivknv/yadisk/issues/29\n.. _PR #31: https://github.com/ivknv/yadisk/pull/31\n.. _issue #43: https://github.com/ivknv/yadisk/issues/43\n.. _issue #45: https://github.com/ivknv/yadisk/issues/45\n.. _issue #49: https://github.com/ivknv/yadisk/issues/49\n.. _\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435: https://yadisk.readthedocs.io/ru/latest/intro.html\n.. _\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API: https://yadisk.readthedocs.io/ru/latest/api_reference/index.html\n.. _\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0439: https://yadisk.readthedocs.io/ru/latest/api_reference/sessions.html\n.. _\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Session: https://yadisk.readthedocs.io/ru/latest/api_reference/session_interface.html\n.. _requests: https://pypi.org/project/requests\n.. _\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438: https://yadisk.readthedocs.io/ru/latest/migration_guide.html\n\n* **Release 3.0.1 (2024-07-09)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 :code:`pyproject.toml`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u043b \u0432 \u0441\u0431\u043e\u0440\u043a\u0443\n    \u043f\u043e\u043b\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0441\u043c. `issue #49`_)\n\n* **Release 3.0.0 (2024-07-09)**\n\n  * \u041d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:\n\n    - \u0421\u043c. `\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438`_ \u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439\n    - \u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n      (\u0441\u043c. \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`wait=<bool>`)\n    - \u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 :code:`AsyncClient.listdir()` \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\n      \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 await\n    - \u0427\u0438\u0441\u043b\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 :code:`Client.get_files()` /\n      :code:`AsyncClient.get_files()` \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c\n      :code:`max_items`, \u0432\u043c\u0435\u0441\u0442\u043e :code:`limit`\n    - \u041c\u0435\u0442\u043e\u0434\u044b :code:`set_token()`, :code:`set_headers()` \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432\n      :code:`Session` \u0438 :code:`AsyncSession` \u0431\u044b\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u044b\n    - \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`fields`\n    - :code:`Client.get_last_uploaded()` /\n      :code:`AsyncClient.get_last_uploaded()` \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e\n      \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\n    - :code:`yadisk.api` - \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c\n    - \u0412\u0441\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u044b, \u0438\u0445 \u0438\u043c\u0435\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 :code:`_`\n      (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, :code:`yadisk._api`)\n  * \u041d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f:\n\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u043c.\n      :code:`Client.wait_for_operation()` /\n      :code:`AsyncClient.wait_for_operation()`)\n    - \u041c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\n      \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: :code:`wait: bool = True`,\n      :code:`poll_interval: float = 1.0` \u0438\n      :code:`poll_timeout: Optional[float] = None`\n    - :code:`Client.listdir()`, :code:`Client.get_files()` \u0438 \u0438\u0445 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435\n      \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`max_items: Optional[int] =\n      None`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\n      \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\n    - \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 :code:`Client` \u0438 :code:`AsyncClient` \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\n      :code:`retry_on: Optional[Tuple[Type[Exception], ...]] = None`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439\n      \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436 \u0438\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c\n      \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u043e\u043f\u044b\u0442\u043a\u0443\n    - \u041c\u043e\u0434\u0443\u043b\u044c :code:`yadisk.types` - \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a API \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445\n      \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a\n    - \u041e\u0431\u044a\u0435\u043a\u0442 \u043b\u043e\u0433\u0433\u0435\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043a\u0430\u043a :code:`yadisk.settings.logger`\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043c\u0435\u0442\u043e\u0434 :code:`YaDiskObject.field()` \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 :code:`@`\n      (:code:`YaDiskObject.__matmul__()`), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435\n      \u043f\u043e\u043b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f :code:`None`\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b :code:`Client.get_upload_link_object()`,\n      :code:`AsyncClient.get_upload_link_object()`, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445\n      \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 :code:`operation_id`\n    - :code:`utils.auto_retry()` \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 :code:`DiskInfoObject`\n    - :code:`EXIFObject` \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 GPS-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b\n    - :code:`CaseInsensitiveDict` - \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0430\u0441\u0442\u044c :code:`yadisk.utils`\n  * \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f:\n\n    - \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u043b\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u0434\u043b\u044f :code:`Client` \u0438 :code:`AsyncClient` \u0441\n      \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u043e\u0432 :code:`.pyi`\n    - \u0421\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f :code:`Client` / :code:`AsyncClient` \u0442\u0435\u043f\u0435\u0440\u044c\n      \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432\n    - \u041e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 JSON (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, :code:`InvalidResponseError`)\n      \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438\n    - \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n      \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435 (\u0441\u043c. `issue #43`_)\n    - \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 :code:`limit` \u0434\u043e :code:`500` (\u0431\u044b\u043b\u043e :code:`10000`)\n      \u0434\u043b\u044f :code:`Client.listdir()` \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0430\u043f\u043a\u0430\u0445\n      (\u0441\u043c. `issue #45`_)\n    - \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 :code:`limit` \u0434\u043e :code:`200` (\u0431\u044b\u043b\u043e :code:`1000`)\n      \u0434\u043b\u044f :code:`Client.get_files()` \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432\n    - :code:`Client.download()` \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u044e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\n      :code:`Connection: close` \u0442.\u043a. \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\n      :code:`Client.upload()`)\n    - :code:`UnknownYaDiskError` \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u0434 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\n      \u043e\u0448\u0438\u0431\u043a\u0435\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:\n\n    - \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 :code:`httpx` \u0438 :code:`aiohttp`:\n      \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 :code:`Response.json()` / :code:`AsyncResponse.json()`\n      \u043d\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438 \u0441\u0432\u043e\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 :code:`RequestError`\n    - \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`stream=True` \u0431\u044b\u043b \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\n      :code:`AsyncClient.download()`, :code:`AsyncClient.download_public()`\n  * \u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:\n\n    - :code:`typing_extensions` \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f Python < 3.10\n\n* **Release 2.1.0 (2024-01-03)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0442\u0435\u043b\u0435 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 \u0432 :code:`PycURLSession.send_request()`, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e\n    \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c\n  * :code:`RequestsSession.close()` \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0441\u0441\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\n  * \u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b :code:`Client` \u0438 :code:`AsyncClient` \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\n    \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e\n  * \u0423\u0434\u0430\u043b\u0435\u043d\u044b \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`session_factory` \u0438 \u043c\u0435\u0442\u043e\u0434 :code:`make_session()`\n    \u043a\u043b\u0430\u0441\u0441\u043e\u0432 :code:`Client` \u0438 :code:`AsyncClient`\n  * \u041a\u043b\u0430\u0441\u0441 \u0441\u0435\u0441\u0441\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438\n    (\u0441\u043c. :code:`Client`/:code:`AsyncClient`)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b :code:`Client.get_device_code()`/:code:`AsyncClient.get_device_code()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b :code:`Client.get_token_from_device_code()`/:code:`AsyncClient.get_token_from_device_code()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`redirect_uri` \u0434\u043b\u044f\n    :code:`Client.get_auth_url()`/:code:`AsyncClient.get_auth_url()` \u0438\n    :code:`Client.get_code_url()`/:code:`AsyncClient.get_code_url()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 PKCE \u0434\u043b\u044f\n    :code:`Client.get_auth_url()`/:code:`AsyncClient.get_auth_url()`,\n    :code:`Client.get_code_url()`/:code:`AsyncClient.get_code_url()` \u0438\n    :code:`Client.get_token()`/:code:`AsyncClient.get_token()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`scope` \u0434\u043b\u044f :code:`TokenObject`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439: :code:`InvalidClientError`,\n    :code:`InvalidGrantError`, :code:`AuthorizationPendingError`,\n    :code:`BadVerificationCodeError` \u0438 :code:`UnsupportedTokenTypeError`\n\n* **Release 2.0.0 (2023-12-12)**\n\n  * \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439, \u0442\u0430\u043a \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 API\n    (\u0441\u043c. `\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435`_ \u0438 `\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a API`_)\n  * \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e HTTP \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u0441\u043c.\n    `\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0439`_ \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430)\n  * \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043b\u044e\u0431\u043e\u0439 HTTP \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\n    (\u0441\u043c. `\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Session`_)\n  * `requests`_ - \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c (\u0445\u043e\u0442\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\n    \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e API)\n  * \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f requests \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f\n    \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 (\u0441\u043c. `\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0439`_)\n  * \u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 HTTP \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c\n    (\u0441\u043c. `\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435`_)\n  * :code:`Client.upload()` \u0438 :code:`Client.upload_by_link()` \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443\u0442\n    \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 (\u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440) \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439\n    \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438\n\n* **Release 1.3.4 (2023-10-15)**\n\n  * \u041c\u0435\u0442\u043e\u0434\u044b :code:`upload()` \u0438 :code:`download()` (\u0438 \u0441\u0432\u044f\u0437\u044f\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c\u0438) \u0442\u0435\u043f\u0435\u0440\u044c\n    \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c/\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e :code:`seek()`\n    (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, :code:`stdin` \u0438 :code:`stdout`, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u0432\n    \u0440\u0435\u0436\u0438\u043c\u0435 :code:`\"rb\"` \u0438\u043b\u0438 :code:`\"wb\"`), \u0441\u043c. `PR #31`_\n\n* **Release 1.3.3 (2023-04-22)**\n\n  * \u041f\u0443\u0442\u0438 \u0432\u0438\u0434\u0430 :code:`app:/` \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e (\u0441\u043c. `issue #26`_)\n\n* **Release 1.3.2 (2023-03-20)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e `issue #29`_: TypeError: 'type' object is not subscriptable\n\n* **Release 1.3.1 (2023-02-28)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e `issue #28`_: :code:`TypeError` \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 :code:`download_public()` \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c :code:`path`\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e :code:`AttributeError` \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 :code:`ResourceLinkObject.public_listdir()`\n\n* **Release 1.3.0 (2023-01-30)**\n\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b convenience-\u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 :code:`...Object` (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043c. :code:`ResourceObject`)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 (type hints)\n  * \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b :code:`InvalidResponseError`, :code:`PayloadTooLargeError`, :code:`UploadTrafficLimitExceededError`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 :code:`DiskInfoObject` \u0438 :code:`SystemFoldersObject`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b :code:`rename()`, :code:`upload_by_link()` \u0438 :code:`download_by_link()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`default_args` \u043e\u0431\u044a\u0435\u043a\u0442\u0430 :code:`YaDisk`\n  * :code:`download()` \u0438 :code:`upload()` \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 :code:`ResourceLinkObject`\n  * \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b :code:`LinkObject` \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438\n  * :code:`ConnectionError` \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u043e\u043f\u044b\u0442\u043a\u0443\n\n* **Release 1.2.19 (2023-01-20)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0444\u0438\u043a\u0441\u0430 \u0438\u0437 1.2.18 \u0434\u043b\u044f \u043f\u0443\u0442\u0435\u0439 :code:`disk:`\n    \u0438 :code:`trash:`.\n\n* **Release 1.2.18 (2023-01-20)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e `issue #26`_: \u0441\u0438\u043c\u0432\u043e\u043b ':' \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a\n    :code:`BadRequestError`. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0433\u043e REST API\n    \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a\u0430, \u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\n\n* **Release 1.2.17 (2022-12-11)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\n    \u043c\u0435\u0442\u043e\u0434\u0430 :code:`__del__()` \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a \u043e\u0448\u0438\u0431\u043a\u0435\n    :code:`ReferenceError` (\u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c).\n    \u0411\u0430\u0433 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Python (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 3.4).\n\n* **Release 1.2.16 (2022-08-17)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 \u0432 :code:`check_token()`: \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0433\u043b\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c :code:`ForbiddenError`,\n    \u0435\u0441\u043b\u0438 \u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u0447\u043d\u043e \u043f\u0440\u0430\u0432 (`issue #23`_).\n\n* **Release 1.2.15 (2021-12-31)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e: \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438\n    \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 :code:`http://` (\u0432\u043c\u0435\u0441\u0442\u043e :code:`https://`).\n    \u0418\u043d\u043e\u0433\u0434\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c :code:`http://` \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0443\u044e\n    \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0441\u044b\u043b\u043e\u043a \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c,\n    \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0447\u0435\u0440\u0435\u0437 :code:`get_operation_status()`)\n    \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f :code:`https://` \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0441\u044b\u043b\u043a\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a\n    \u0432\u0435\u0440\u043d\u0443\u043b :code:`http://`.\n\n* **Release 1.2.14 (2019-03-26)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 :code:`TypeError` \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 :code:`get_public_*` \u043f\u0440\u0438\n    \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c :code:`path` (`issue #7`_)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`unlimited_autoupload_enabled` \u0434\u043b\u044f :code:`DiskInfoObject`\n\n* **Release 1.2.13 (2019-02-23)**\n\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d :code:`md5` \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f :code:`remove()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d :code:`UserPublicInfoObject`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`country` \u0434\u043b\u044f :code:`UserObject`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 :code:`photoslice_time` \u0434\u043b\u044f :code:`ResourceObject`, :code:`PublicResourceObject`\n    \u0438 :code:`TrashResourceObject`\n\n* **Release 1.2.12 (2018-10-11)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433: \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `fields` \u0432 `listdir()` (`issue #4`_)\n\n* **Release 1.2.11 (2018-06-30)**\n\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`sort` \u0434\u043b\u044f :code:`get_meta()`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u044b :code:`file` \u0438 :code:`antivirus_status` \u0434\u043b\u044f :code:`ResourceObject`,\n    :code:`PublicResourceObject` \u0438 :code:`TrashResourceObject`\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`headers`\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 :code:`download()` \u0438 :code:`download_public()` (`issue #2`_)\n  * \u0423\u0431\u0440\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 :code:`*args`\n\n* **Release 1.2.10 (2018-06-14)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 :code:`timeout=None`. :code:`None` \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u201e\u0431\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430\u201c,\n    \u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 :code:`None` \u0431\u044b\u043b\u043e \u0441\u0438\u043d\u043e\u043d\u0438\u043c\u0438\u0447\u043d\u043e \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c.\n\n* **Release 1.2.9 (2018-04-28)**\n\n  * \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f \u043d\u0430 LGPLv3 (\u0441\u043c. :code:`COPYING` \u0438 :code:`COPYING.lesser`)\n  * \u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u0430\u043a\u0435\u0442\u0435\n\n* **Release 1.2.8 (2018-04-17)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a: \u0443 :code:`PublicResourceListObject.items` \u0438\n    :code:`TrashResourceListObject.items` \u0431\u044b\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445\n  * \u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b \u043f\u043e\u043b\u0435\u0439 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 :code:`fields` \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438\n    \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 API (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, :code:`embedded` -> :code:`_embedded`)\n\n* **Release 1.2.7 (2018-04-15)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435/\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438\n\n* **Release 1.2.6 (2018-04-13)**\n\n  * \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0435\u0441\u0441\u0438\u0439 :code:`requests` \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043c\u043e\u0436\u043d\u043e\n    \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c (\u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432)\n  * :code:`keep-alive` \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435/\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n\n* **Release 1.2.5 (2018-03-31)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0431\u0430\u0433 (\u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443) \u0432 :code:`utils.auto_retry()` (\u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0433 \u0432\u044b\u0437\u0432\u0430\u0442\u044c :code:`AttributeError`)\n  * \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f :code:`upload()`, :code:`download()` \u0438 :code:`download_public()` \u0446\u0435\u043b\u0438\u043a\u043e\u043c\n  * \u0417\u0430\u0434\u0430\u043d\u043e :code:`stream=True` \u0434\u043b\u044f :code:`download()` \u0438 :code:`download_public()`\n  * \u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n\n* **Release 1.2.4 (2018-02-19)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 (:code:`TokenObject.exprires_in` -> :code:`TokenObject.expires_in`)\n\n* **Release 1.2.3 (2018-01-20)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e :code:`TypeError` \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 :code:`WrongResourceTypeError`\n\n* **Release 1.2.2 (2018-01-19)**\n\n  * :code:`refresh_token()` \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0438\u043b\u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u043e\u043a\u0435\u043d.\n\n* **Release 1.2.1 (2018-01-14)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a.\n\n* **Release 1.2.0 (2018-01-14)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 :code:`n_retries=0` \u0432 :code:`upload()`, :code:`download()` \u0438 :code:`download_public()`\n  * :code:`upload()`, :code:`download()` \u0438 :code:`download_public()` \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043d\u0438\u0447\u0435\u0433\u043e (\u0441\u043c. \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043c\u043e\u0434\u0443\u043b\u044c :code:`utils` (\u0441\u043c. \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b :code:`RetriableYaDiskError`, :code:`WrongResourceTypeError`, :code:`BadGatewayError` \u0438 :code:`GatewayTimeoutError`\n  * :code:`listdir()` \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 :code:`WrongResourceTypeError` \u0432\u043c\u0435\u0441\u0442\u043e :code:`NotADirectoryError`\n\n* **Release 1.1.1 (2017-12-29)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 :code:`upload()`, :code:`download()` \u0438 :code:`download_public()`.\n    \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 :code:`n_retries` \u0438 :code:`retry_interval` \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (:code:`TypeError`).\n\n* **Release 1.1.0 (2017-12-27)**\n\n  * \u0423\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (\u0441\u043c. \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e)\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 :code:`force_async`\n  * \u041c\u0435\u043b\u043a\u0438\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0433\u043e\u0432\n\n* **Release 1.0.8 (2017-11-29)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0431\u0430\u0433 \u0432 :code:`listdir()`\n\n* **Release 1.0.7 (2017-11-04)**\n\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d :code:`install_requires` \u0432 :code:`setup.py`\n\n* **Release 1.0.6 (2017-11-04)**\n\n  * \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 :code:`OperationLinkObject`\n\n* **Release 1.0.5 (2017-10-29)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d :code:`setup.py`, \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0435\u0441\u0442\u044b\n\n* **Release 1.0.4 (2017-10-23)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0431\u0430\u0433\u0438 \u0432 :code:`upload`, :code:`download` \u0438 :code:`listdir`\n  * \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e :code:`limit` \u0432 :code:`listdir` \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0432 :code:`10000`\n\n* **Release 1.0.3 (2017-10-22)**\n\n  * \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043c\u043e\u0434\u0443\u043b\u044c :code:`settings`\n\n* **Release 1.0.2 (2017-10-19)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f :code:`get_code_url` (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b)\n\n* **Release 1.0.1 (2017-10-18)**\n\n  * \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u0431\u0430\u0433 \u0432 :code:`GetTokenRequest` (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440)\n\n* **Release 1.0.0 (2017-10-18)**\n\n  * \u041f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437\n",
    "bugtrack_url": null,
    "license": "LGPLv3",
    "summary": "\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430-\u043a\u043b\u0438\u0435\u043d\u0442 REST API \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a\u0430 / Yandex.Disk REST API client library",
    "version": "3.0.1",
    "project_urls": {
        "Bug tracker": "https://github.com/ivknv/yadisk/issues",
        "Documentation (EN)": "https://yadisk.readthedocs.io/en/latest",
        "Documentation (RU)": "https://yadisk.readthedocs.io/ru/latest",
        "Source code": "https://github.com/ivknv/yadisk"
    },
    "split_keywords": [
        "yandex.disk",
        " yandex",
        " rest"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3ccd0272dcac2f854ac60baecb4cc8867e0d53e0cf517251fb5c7b9aeff5a90e",
                "md5": "5241db0f47181f4556023a7dd3585699",
                "sha256": "06490c2aae1535876604dda9bddd02a26412a77644d8d673d0e3e92356721931"
            },
            "downloads": -1,
            "filename": "yadisk-3.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5241db0f47181f4556023a7dd3585699",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 127928,
            "upload_time": "2024-07-09T17:51:07",
            "upload_time_iso_8601": "2024-07-09T17:51:07.542379Z",
            "url": "https://files.pythonhosted.org/packages/3c/cd/0272dcac2f854ac60baecb4cc8867e0d53e0cf517251fb5c7b9aeff5a90e/yadisk-3.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ace57c0c0b47ca49032f6cc4ff037196bc2909598f932eea3edd84d8de251292",
                "md5": "2a01ad7873b4b4369cd67b3d96a59001",
                "sha256": "bc1a786583cc263680a797ba4dc5915fe95c843f98fe35dc3f6997e4a4ae016f"
            },
            "downloads": -1,
            "filename": "yadisk-3.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2a01ad7873b4b4369cd67b3d96a59001",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 117457,
            "upload_time": "2024-07-09T17:51:10",
            "upload_time_iso_8601": "2024-07-09T17:51:10.427272Z",
            "url": "https://files.pythonhosted.org/packages/ac/e5/7c0c0b47ca49032f6cc4ff037196bc2909598f932eea3edd84d8de251292/yadisk-3.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-09 17:51:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ivknv",
    "github_project": "yadisk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "yadisk"
}
        
Elapsed time: 8.74889s