
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
.. |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 библиотеки:
requests
(используется по умолчанию для синхронного API)httpx
(синхронный и асинхронный API, используется по умолчанию для асинхронного API)aiohttp
(асинхронный API)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
pip install yadisk[pycurl]
pip install yadisk[async-files,aiohttp]
Примеры
.. 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"))
.. 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)
Нововведения:
Добавлены методы для управления настройками публичного доступа к ресурсам:
Client.update_public_settings()
Client.get_public_settings()
Client.get_public_available_settings()
Внимание: похоже, что эти эндпоинты не полностью соответствуют официальной документации REST API, их функциональность на практике ограничена.
Добавлен новый класс исключений :code:PasswordRequiredError
Добавлено несколько новых полей :code:DiskInfoObject
:
deletion_restricion_days
hide_screenshots_in_photoslice
is_legal_entity
Реализован метод :code:__dir__()
для объектов ответов сервера
Улучшения:
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
и
производных классов
Исправления:
Client.wait_for_operation()
теперь использует
:code:time.monotonic()
вместо :code:time.time()
Улучшения:
Release 3.2.0 (2025-02-03)
Нововведения:
Добавлен новый метод: :code:Client.makedirs()
и
:code:AsyncClient.makedirs()
(см. issue #53
_)
Добавлено несколько недостающих полей :code:DiskInfoObject
photounlim_size
will_be_overdrawn
free_photounlim_end_date
payment_flow
Добавлено недостающее поле :code:sizes
для :code:ResourceObject
и
связанных с ним объектов
Исправления:
Client.rename()
/ :code:AsyncClient.rename()
теперь вызывает
:code:ValueError
при попытке переименовать корневую папкуRelease 3.1.0 (2024-07-12)
Нововведения:
GoneError
и
:code:ResourceDownloadLimitExceededError
Client.get_all_public_resources()
и
:code:AsyncClient.get_all_public_resources()
Исправления:
headers
и других опциональных параметров сессии как
:code:None
больше не вызывает ошибокClient.rename()
и
:code:AsyncClient.rename()
при указании пустого имени файлаlistdir()
и аналогичных)items
класса
:code:PublicResourceListObject
PycURLSession
при задании :code:stream=True
Client.download()
,
:code:Client.download_by_link()
, :code:AsyncClient.download()
и
:code:AsyncClient.download_by_link()
, если сервер вернул ошибочный код
состоянияRelease 3.0.1 (2024-07-09)
pyproject.toml
, который не включал в сборку
полное содержимое пакета (см. issue #49
_)Release 3.0.0 (2024-07-09)
Несовместимые изменения:
Руководство по миграции
_ для подробностейwait=<bool>
)AsyncClient.listdir()
больше не требует
дополнительного ключевого слова awaitClient.get_files()
/
:code:AsyncClient.get_files()
теперь контролируется параметром
:code:max_items
, вместо :code:limit
set_token()
, :code:set_headers()
интерфейсов
:code:Session
и :code:AsyncSession
были удаленыfields
Client.get_last_uploaded()
/
:code:AsyncClient.get_last_uploaded()
теперь возвращает список вместо
генератораyadisk.api
- теперь скрытый модуль_
(например, :code:yadisk._api
)Нововведения:
Client.wait_for_operation()
/
:code:AsyncClient.wait_for_operation()
)wait: bool = True
,
:code:poll_interval: float = 1.0
и
:code:poll_timeout: Optional[float] = None
Client.listdir()
, :code:Client.get_files()
и их асинхронные
вариации теперь принимают новый параметр :code:max_items: Optional[int] = None
, который может быть использован, чтобы ограничить максимальное число
возвращаемых файловClient
и :code:AsyncClient
теперь принимает
:code:retry_on: Optional[Tuple[Type[Exception], ...]] = None
, который
позволяет указывать кортеж из дополнительных исключений, которые могут вызвать
автоматическую повторную попыткуyadisk.types
- теперь публичныйyadisk.settings.logger
YaDiskObject.field()
и оператор :code:@
(:code:YaDiskObject.__matmul__()
), который удостоверяется, что указанное
поле объекта не является :code:None
Client.get_upload_link_object()
,
:code:AsyncClient.get_upload_link_object()
, возвращаемые значения которых
дополнительно содержат :code:operation_id
utils.auto_retry()
теперь принимает больше параметровDiskInfoObject
EXIFObject
теперь содержит GPS-координатыCaseInsensitiveDict
- теперь часть :code:yadisk.utils
Улучшения:
Client
и :code:AsyncClient
с
помощью файлов :code:.pyi
Client
/ :code:AsyncClient
теперь
включают в себя больше параметровInvalidResponseError
)
также вызывают автоматические повторные попыткиissue #43
_)limit
до :code:500
(было :code:10000
)
для :code:Client.listdir()
для избежания таймаутов при больших папках
(см. issue #45
_)limit
до :code:200
(было :code:1000
)
для :code:Client.get_files()
для избежания таймаутовClient.download()
и подобные методы больше не задают заголовок
:code:Connection: close
т.к. в этом нет необходимости (в отличие от
:code:Client.upload()
)UnknownYaDiskError
теперь включает код статуса в сообщение об
ошибкеИсправления:
httpx
и :code:aiohttp
:
реализации методов :code:Response.json()
/ :code:AsyncResponse.json()
не преобразовывали свои исключения в :code:RequestError
stream=True
был не задан по умолчанию в
:code:AsyncClient.download()
, :code:AsyncClient.download_public()
Другие изменения:
typing_extensions
теперь требуется для Python < 3.10Release 2.1.0 (2024-01-03)
PycURLSession.send_request()
, из-за которого
переданные заголовки игнорировалисьRequestsSession.close()
теперь закрывает сессию для всех потоковClient
и :code:AsyncClient
теперь используют
существующую сессиюsession_factory
и метод :code:make_session()
классов :code:Client
и :code:AsyncClient
Client
/:code:AsyncClient
)Client.get_device_code()
/:code:AsyncClient.get_device_code()
Client.get_token_from_device_code()
/:code:AsyncClient.get_token_from_device_code()
redirect_uri
для
:code:Client.get_auth_url()
/:code:AsyncClient.get_auth_url()
и
:code:Client.get_code_url()
/:code:AsyncClient.get_code_url()
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()
scope
для :code:TokenObject
InvalidClientError
,
:code:InvalidGrantError
, :code:AuthorizationPendingError
,
:code:BadVerificationCodeError
и :code:UnsupportedTokenTypeError
Release 2.0.0 (2023-12-12)
Введение
_ и Справочник API
_)Доступные реализации сессий
_ для полного списка)Интерфейс Session
_)requests
_ - теперь опциональная зависимость (хотя всё ещё используется
по умолчанию для синхронного API)Доступные реализации сессий
_)Введение
_)Client.upload()
и :code:Client.upload_by_link()
теперь могут
принимать функцию, возвращающую итератор (или генератор) в качестве полезной
нагрузкиRelease 1.3.4 (2023-10-15)
upload()
и :code:download()
(и связянные с ними) теперь
могут загружать/скачивать файлы, не поддерживающие операцию :code:seek()
(например, :code:stdin
и :code:stdout
, при условии, что они открыты в
режиме :code:"rb"
или :code:"wb"
), см. PR #31
_Release 1.3.3 (2023-04-22)
app:/
теперь работают правильно (см. issue #26
_)Release 1.3.2 (2023-03-20)
issue #29
_: TypeError: 'type' object is not subscriptableRelease 1.3.1 (2023-02-28)
issue #28
_: :code:TypeError
при вызове :code:download_public()
с параметром :code:path
AttributeError
при вызове :code:ResourceLinkObject.public_listdir()
Release 1.3.0 (2023-01-30)
...Object
(например, см. :code:ResourceObject
)InvalidResponseError
, :code:PayloadTooLargeError
, :code:UploadTrafficLimitExceededError
DiskInfoObject
и :code:SystemFoldersObject
rename()
, :code:upload_by_link()
и :code:download_by_link()
default_args
объекта :code:YaDisk
download()
и :code:upload()
теперь возвращают :code:ResourceLinkObject
LinkObject
были заменены более конкретными подклассамиConnectionError
теперь тоже вызывает повторную попыткуRelease 1.2.19 (2023-01-20)
disk:
и :code:trash:
.Release 1.2.18 (2023-01-20)
issue #26
_: символ ':' в именах файлов приводит к
:code:BadRequestError
. Это поведение вызвано работой самого REST API
Яндекс.Диска, но было исправлено на уровне библиотеки.Release 1.2.17 (2022-12-11)
__del__()
приводило в некоторых случаях к ошибке
:code:ReferenceError
(ошибка игнорировалась, но сообщение выводилось).
Баг проявляется по большей части в старых версиях Python (например 3.4).Release 1.2.16 (2022-08-17)
check_token()
: функция могла вызвать :code:ForbiddenError
,
если у приложения недостатчно прав (issue #23
_).Release 1.2.15 (2021-12-31)
http://
(вместо :code:https://
).
Иногда Яндекс.Диск может вернуть :code:http://
ссылку на асинхронную
операцию. Теперь обе версии ссылок распознаются правильно, при этом,
при получении информации об операции (через :code:get_operation_status()
)
всегда используется :code:https://
версия ссылки, даже если Яндекс.Диск
вернул :code:http://
.Release 1.2.14 (2019-03-26)
TypeError
в функциях :code:get_public_*
при
использовании с параметром :code:path
(issue #7
_)unlimited_autoupload_enabled
для :code:DiskInfoObject
Release 1.2.13 (2019-02-23)
md5
параметр для :code:remove()
UserPublicInfoObject
country
для :code:UserObject
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)
sort
для :code:get_meta()
file
и :code:antivirus_status
для :code:ResourceObject
,
:code:PublicResourceObject
и :code:TrashResourceObject
headers
download()
и :code:download_public()
(issue #2
_)*args
Release 1.2.10 (2018-06-14)
timeout=None
. :code:None
должен означать „без таймаута“,
но в предыдущих версиях значение :code:None
было синонимично со стандартным таймаутом.Release 1.2.9 (2018-04-28)
COPYING
и :code:COPYING.lesser
)Release 1.2.8 (2018-04-17)
PublicResourceListObject.items
и
:code:TrashResourceListObject.items
были неправильные типы данныхfields
заменяются при выполнении
запросов API (например, :code:embedded
-> :code:_embedded
)Release 1.2.7 (2018-04-15)
Release 1.2.6 (2018-04-13)
requests
кэшируются, чтобы их можно
было переиспользовать (иногда может существенно ускорить выполнение запросов)keep-alive
отключается при загрузке/скачивании файлов по умолчаниюRelease 1.2.5 (2018-03-31)
utils.auto_retry()
(иногда мог вызвать :code:AttributeError
)upload()
, :code:download()
и :code:download_public()
целикомstream=True
для :code:download()
и :code:download_public()
Release 1.2.4 (2018-02-19)
TokenObject.exprires_in
-> :code:TokenObject.expires_in
)Release 1.2.3 (2018-01-20)
TypeError
при вызове :code:WrongResourceTypeError
Release 1.2.2 (2018-01-19)
refresh_token()
больше не требует валидный или пустой токен.Release 1.2.1 (2018-01-14)
Release 1.2.0 (2018-01-14)
n_retries=0
в :code:upload()
, :code:download()
и :code:download_public()
upload()
, :code:download()
и :code:download_public()
больше не возвращают ничего (см. документацию)utils
(см. документацию)RetriableYaDiskError
, :code:WrongResourceTypeError
, :code:BadGatewayError
и :code:GatewayTimeoutError
listdir()
теперь вызывает :code:WrongResourceTypeError
вместо :code:NotADirectoryError
Release 1.1.1 (2017-12-29)
upload()
, :code:download()
и :code:download_public()
.
До этого использование :code:n_retries
и :code:retry_interval
вызывало исключение (:code:TypeError
).Release 1.1.0 (2017-12-27)
force_async
Release 1.0.8 (2017-11-29)
listdir()
Release 1.0.7 (2017-11-04)
install_requires
в :code:setup.py
Release 1.0.6 (2017-11-04)
OperationLinkObject
Release 1.0.5 (2017-10-29)
setup.py
, теперь исключает тестыRelease 1.0.4 (2017-10-23)
upload
, :code:download
и :code:listdir
limit
в :code:listdir
установлено в :code:10000
Release 1.0.3 (2017-10-22)
settings
Release 1.0.2 (2017-10-19)
get_code_url
(добавлены недостающие параметры)Release 1.0.1 (2017-10-18)
GetTokenRequest
(добавлен недостающий параметр)Release 1.0.0 (2017-10-18)
FAQs
Библиотека-клиент REST API Яндекс.Диска / Yandex.Disk REST API client library
We found that yadisk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.