ivknv / yadisk

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

Home Page:https://yadisk.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Не загружаются файлы с ':' в названии

Jud1cator opened this issue · comments

Не получается загрузить файл, если в имени есть двоеточие (таймстемп в ISO формате):

import os
import yadisk

filename = "2022-01-01T00:00:00.000000+03:00.zip"

y = yadisk.YaDisk(token=os.getenv("YDISK_TOKEN"))

y.upload(filename, "/" + filename)

Вывод:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    y.upload(filename, "/" + filename)
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/yadisk.py", line 313, in upload
    functions.upload(self.get_session(), path_or_file, dst_path, **kwargs)
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/functions/resources.py", line 465, in upload
    auto_retry(attempt, n_retries, retry_interval)
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/utils.py", line 85, in auto_retry
    return func()
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/functions/resources.py", line 445, in attempt
    link = get_upload_link(session, dst_path, **temp_kwargs)
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/functions/resources.py", line 241, in get_upload_link
    request.send()
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/api/api_request.py", line 114, in send
    auto_retry(self._attempt, self.n_retries, self.retry_interval)
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/utils.py", line 85, in auto_retry
    return func()
  File "/home/judicator/sandbox/venv/lib/python3.8/site-packages/yadisk/api/api_request.py", line 105, in _attempt
    raise get_exception(self.response)
yadisk.exceptions.BadRequestError: Указанный формат ресурса Диска "00:00.000000+03:00.zip" не корректен. Должен начинаться с /. (Specified path "00:00.000000+03:00.zip" has incorrect format / DiskPathFormatError)

Похоже это баг/фича Яндекс.Диска.
Если добавить disk:/ к пути, то запрос работает:

y.upload(filename, "disk:/" + filename)

То же самое с другими запросами.

В пути можно (если тип запроса позволяет) передавать значения disk:/ (доступ к обычным файлам) и trash:/ (доступ к файлам в корзине), похоже проблема связана с этим.
Возможно в будущем добавлю фикс на уровне библиотеки, как время появится.

Ещё там можно передавать app:/ для доступа к файлам в папке приложения

Ещё там можно передавать app:/ для доступа к файлам в папке приложения

Исправил в версии 1.3.3 (1.4.3 для yadisk-async), теперь app:/ работает.