Не загружаются файлы с ':' в названии
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:/
работает.