SkillAgentSearch skills...

Yadisk

Библиотека-клиент REST API Яндекс.Диска для Python / Yandex.Disk REST API client library for Python

Install / Use

/learn @ivknv/Yadisk
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

YaDisk

.. |RTD Badge| image:: https://img.shields.io/readthedocs/yadisk.svg :alt: Read the Docs :target: https://yadisk.readthedocs.io/ru/latest/

.. |CI Badge| image:: https://img.shields.io/github/actions/workflow/status/ivknv/yadisk/lint_and_test.yml :alt: GitHub Actions Workflow Status

.. |PyPI Badge| image:: https://img.shields.io/pypi/v/yadisk.svg :alt: PyPI :target: https://pypi.org/project/yadisk

.. |Python Version Badge| image:: https://img.shields.io/pypi/pyversions/yadisk :alt: PyPI - Python Version

.. |Coverage Badge| image:: https://coveralls.io/repos/github/ivknv/yadisk/badge.svg?branch=master :alt: Coverage :target: https://coveralls.io/github/ivknv/yadisk

|RTD Badge| |CI Badge| |PyPI Badge| |Python Version Badge| |Coverage Badge|

.. _English version of this document: https://github.com/ivknv/yadisk/blob/master/README.en.rst

English version of this document_

YaDisk - это библиотека-клиент REST API Яндекс.Диска.

.. _Read the Docs (EN): https://yadisk.readthedocs.io .. _Read the Docs (RU): https://yadisk.readthedocs.io/ru/latest

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

.. contents:: Содержание:

Установка


:code:yadisk поддерживает несколько HTTP библиотек и реализует одновременно как синхронный, так и асинхронный API.

На данный момент поддерживаются следующие HTTP библиотеки:

  • :code:requests (используется по умолчанию для синхронного API)
  • :code:httpx (синхронный и асинхронный API, используется по умолчанию для асинхронного API)
  • :code:aiohttp (асинхронный API)
  • :code:pycurl (синхронный API)

Для синхронного API (устанавливает :code:requests):

.. code:: bash

pip install yadisk[sync-defaults]

Для асинхронного API (устанавливает :code:httpx и :code:aiofiles):

.. code:: bash

pip install yadisk[async-defaults]

Вы можете также вручную установить нужные библиотеки:

.. code:: bash

Для использования совместно с pycurl

pip install yadisk[pycurl]

Для использования совместно с aiohttp, также установит aiofiles

pip install yadisk[async-files,aiohttp]

Примеры


Синхронный API

.. code:: python

import yadisk

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

# Вы можете использовать либо конструкцию with, либо вручную вызвать client.close() в конце
with client:
    # Проверяет, валиден ли токен
    print(client.check_token())

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

    # Выводит содержимое "/some/path"
    print(list(client.listdir("/some/path")))

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

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

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

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

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

Асинхронный API

.. code:: python

import yadisk
import aiofiles

client = yadisk.AsyncClient(token="<token>")
# или
# client = yadisk.AsyncClient("<application-id>", "<application-secret>", "<token>")

# Вы можете использовать либо конструкцию with, либо вручную вызвать client.close() в конце
async with client:
    # Проверяет, валиден ли токен
    print(await client.check_token())

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

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

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

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

    # То же самое, но с обычными файлами
    with open("file_to_upload.txt", "rb") as f:
        await client.upload(f, "/destination.txt")

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

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

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

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

Участие в разработке


Если вы хотите поучаствовать в разработке, см. CONTRIBUTING.rst <https://github.com/ivknv/yadisk/blob/master/CONTRIBUTING.rst>_.

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


.. _issue #2: https://github.com/ivknv/yadisk/issues/2 .. _issue #4: https://github.com/ivknv/yadisk/issues/4 .. _issue #7: https://github.com/ivknv/yadisk/issues/7 .. _issue #23: https://github.com/ivknv/yadisk/issues/23 .. _issue #26: https://github.com/ivknv/yadisk/issues/26 .. _issue #28: https://github.com/ivknv/yadisk/issues/28 .. _issue #29: https://github.com/ivknv/yadisk/issues/29 .. _PR #31: https://github.com/ivknv/yadisk/pull/31 .. _issue #43: https://github.com/ivknv/yadisk/issues/43 .. _issue #45: https://github.com/ivknv/yadisk/issues/45 .. _issue #49: https://github.com/ivknv/yadisk/issues/49 .. _issue #53: https://github.com/ivknv/yadisk/issues/53 .. _Введение: https://yadisk.readthedocs.io/ru/latest/intro.html .. _Справочник API: https://yadisk.readthedocs.io/ru/latest/api_reference/index.html .. _Доступные реализации сессий: https://yadisk.readthedocs.io/ru/latest/api_reference/sessions.html .. _Интерфейс Session: https://yadisk.readthedocs.io/ru/latest/api_reference/session_interface.html .. _requests: https://pypi.org/project/requests .. _Руководство по миграции: https://yadisk.readthedocs.io/ru/latest/migration_guide.html .. _PR #57: https://github.com/ivknv/yadisk/pull/57

  • Release 3.4.0 (2025-07-10)

    • Нововведения:

      • Добавлены методы для управления настройками публичного доступа к ресурсам:

        • :code:Client.update_public_settings()
        • :code:Client.get_public_settings()
        • :code:Client.get_public_available_settings()

        Внимание: похоже, что эти эндпоинты не полностью соответствуют официальной документации REST API, их функциональность на практике ограничена.

      • Добавлен новый класс исключений :code:PasswordRequiredError

      • Добавлено несколько новых полей :code:DiskInfoObject:

        • :code:deletion_restricion_days
        • :code:hide_screenshots_in_photoslice
        • :code:is_legal_entity
      • Реализован метод :code:__dir__() для объектов ответов сервера

    • Улучшения:

      • :code:repr() объектов ответов API теперь показывает только те ключи, которые фактически присутствуют (вместо отображения их значений как :code:None, как раньше)
  • Release 3.3.0 (2025-04-29)

    • Нововведения:

      • Спуфинг User-Agent для обхода ограничения скорости загрузки файлов на Диск (см. PR #57_). :code:Client.upload() и связанные с ним методы (включая :code:AsyncClient) имеют новый опциональный параметр :code:spoof_user_agent, который по умолчанию имеет значение :code:True. Этот параметр можно использовать для отключения спуфинга, если это необходимо.

      • Добавлена поддержка pretty-printing в IPython для :code:YaDiskObject и производных классов

    • Исправления:

      • :code:Client.wait_for_operation() теперь использует :code:time.monotonic() вместо :code:time.time()
    • Улучшения:

      • Сообщения об ошибках REST API теперь чётко разделены на четыре части (сообщение, описание, код ошибки и код состояния HTTP)
  • Release 3.2.0 (2025-02-03)

    • Нововведения:

      • Добавлен новый метод: :code:Client.makedirs() и :code:AsyncClient.makedirs() (см. issue #53_)

      • Добавлено несколько недостающих полей :code:DiskInfoObject

        • :code:photounlim_size
        • :code:will_be_overdrawn
        • :code:free_photounlim_end_date
        • :code:payment_flow
      • Добавлено недостающее поле :code:sizes для :code:ResourceObject и связанных с ним объектов

    • Исправления:

      • :code:Client.rename() / :code:AsyncClient.rename() теперь вызывает :code:ValueError при попытке переименовать корневую папку
      • Номера автоматических повторных попыток логировались с ошибкой на единицу, теперь они логируются правильно
  • Release 3.1.0 (2024-07-12)

    • Нововведения:

      • Добавлены новые исключения: :code:GoneError и :code:ResourceDownloadLimitExceededError
      • Добавлен новый метод: :code:Client.get_all_public_resources() и :code:AsyncClient.get_all_public_resources()
    • Исправления:

      • Задание :code:headers и других опциональных параметров сессии как :code:None больше не вызывает ошибок
      • Исправлено неправильное поведение :code:Client.rename() и :code:AsyncClient.rename() при указании пустого имени файла
      • Исправлено несколько опечаток в асинхронных реализациях convenience-методов (:code:listdir() и аналогичных)
      • Исправлен неправильный тип данных у атрибута :code:items класса :code:PublicResourceListObject
      • Исправлены ошибки при отправке запросов API с помощью :code:PycURLSession при задании :code:stream=True
      • Данные не будут записаны в файл методами :code:Client.download(), :code:Client.download_by_link(), :code:AsyncClient.download() и :code:AsyncClient.download_by_link(), если сервер вернул ошибочный код
View on GitHub
GitHub Stars156
CategoryDevelopment
Updated20h ago
Forks12

Languages

Python

Security Score

100/100

Audited on Mar 30, 2026

No findings