Загрузить файл на яндекс диск python
Обновлено: 09.05.2024
Запрос URL для загрузки следует отправлять с помощью метода GET.
Путь, по которому следует загрузить файл. Например, %2Fbar%2Fphoto.jpg . Максимальная длина имени загружаемого файла — 255 символов; максимальная длина пути — 32760 символов.
Путь в значении параметра следует кодировать в URL-формате.
Признак перезаписи файла. Учитывается, если файл загружается в папку, в которой уже есть файл с таким именем.
false — не перезаписывать файл, отменить загрузку (используется по умолчанию);
true — удалить файл с совпадающим именем и записать загруженный файл.
Список свойств JSON, которые следует включить в ответ. Ключи, не указанные в этом списке, будут отброшены при составлении ответа. Если параметр не указан, ответ возвращается полностью, без сокращений.
Имена ключей следует указывать через запятую, а вложенные ключи разделять точками. Например: name,_embedded.items.path .
Путь, по которому следует загрузить файл. Например, %2Fbar%2Fphoto.jpg . Максимальная длина имени загружаемого файла — 255 символов; максимальная длина пути — 32760 символов.
Путь в значении параметра следует кодировать в URL-формате.
Признак перезаписи файла. Учитывается, если файл загружается в папку, в которой уже есть файл с таким именем.
false — не перезаписывать файл, отменить загрузку (используется по умолчанию);
true — удалить файл с совпадающим именем и записать загруженный файл.
Список свойств JSON, которые следует включить в ответ. Ключи, не указанные в этом списке, будут отброшены при составлении ответа. Если параметр не указан, ответ возвращается полностью, без сокращений.
Имена ключей следует указывать через запятую, а вложенные ключи разделять точками. Например: name,_embedded.items.path .
* Обязательный параметр
Формат ответа
Если запрос был обработан без ошибок, API отвечает кодом 200 OK . В теле ответа, в объекте Link, возвращается сгенерированный URL для загрузки файла. Если в течение 30 минут этот URL не будет запрошен, он перестанет работать, и нужно будет запросить новую ссылку.
Если запрос вызвал ошибку, возвращается подходящий код ответа, а тело ответа содержит описание ошибки.
URL. Может быть шаблонизирован, см. ключ templated .
Признак URL, который был шаблонизирован согласно RFC 6570. Возможные значения:
Jan 30, 2014 11:55 · 1027 words · 5 minute read python
Дело было вечером, делать было нечего, вот и решил я написать обёртку для Яндекс Диска на python, дабы потом прикрутить скрипты бекапа для своих VPS. Готовое решение можно посмотреть на github или установить через pip: pip install YaDiskClient . Прежде чем начать, как полагается, посмотрел что же уже реализовано. Есть одна библиотека на PHP, которая удовлетворяет всем моим требованиям за исключением языка - хочется всё же работать на питоне. На pypi нашёл наработку от lexich. Вроде делает всё необходимое и даже больше, но какая-то она монстроидальная. Мне-то надо всего несколько методов. В общем, решил сам поковыряться с webdav и API Яндекс.Диска. К слову, авторизация в первом проекте реализована через OAuth, во втором - Basic. Я остановился на втором как наиболее простом. Класс для OAuth есть в первом коммите, может кому и пригодится :)
Yandex.Disk API
Следующий шаг - выполнение примитивного запроса. Для примера я взял получение информации о свободном месте, отправив такой запрос:
К сожалению, requests поддерживает только REST-запросы, среди которых отсутствует тип PROPFIND, так что придётся делать через сессии:
Методы создания, копирования, удаления файлов тривиальны. Если кому-то будет интересно, то посмотреть можно здесь.
Тесты
Стало необходимым писать тесты для своих программ, так что побудем в тренде :) Для тестирования принято использовать библиотеку unittest. Документации по ней море, но мне бы хотелось остановиться на двух моментах. Первый - методы setUp и tearDown. Они выполняются перед и после каждого метода класса теста. В общем случае подключение к Диску может занимать заметное время, так что я вынес инициализацию в методы класса setUpClass и tearDownClass, которые будут вызыватся только один раз за прогон.
Второй момент - порядок выполнения тестов. По умолчанию он определяется по имени метода. Все методы с префиксом “test_” помещаются в список, сортируются и выполняются в таком порядке. Так что на это можно повлиять 2 способами: следить за именами тестовых методов или же создать набор тестов, куда помещать их в нужном порядке:
Continuous Integration
Куда ж в наше время без CI?! Для Open Source проектов я нашёл 2 подходящих сервиса: TravisCI и CircleCI. Оба они достойны внимания, но я уловил некоторую разницу. TravisCI, как мне кажется, больше подходит для тестирования библиотек в разных окружениях. Его скрипт настройки для моего проекта выглядит както-то так:
Сколько займёт добавление новой версии python? Менее 5 минут! Причём тесты запускаются параллельно, т.е. одновременно 5 работающих контейнеров. На CircleCI можно реализовать подобное поведение, но там в бесплатной версии дают максимум 4 контейнера. Он больше подходит для тестирования одного проекта с зависимыми сервисами (postgres, redis, elasticsearch…); собственно, я его и применил для своего GeoPuzzle, о чём и поделился в отдельной [статье].
Подключается TravisCI буквально в 2 клика:
- разрешить доступ на GitHub
- включить для конкретного проекта
Вкладка “Settings” обычно скрывается под меню “More options”. Там можно задать переменные окружения, а также периодические выполнения задач, чтобы быть уверенным, что ничего не отвалилось.
Шилдики
Замечали, что у некоторых проектов в README.md показываются классные иконки со статусом сборки и покрытием? Тоже хочу такие же :)
Все они прописываются в README.md как ссылки на изображения (извините, у меня rst):
Создание Pypi пакета
Для создания пакета достаточно будет создать файлик setup.py, в котором будет вызываться процедура setuptools.setup. Пример можно посмотреть здесь. В нём описываются такие важные вещи как имя пакета, версия, зависимости, описание, ключевые слова, теги…
Для начала необходимо создать дистрибуцию: $ python setup.py sdist , которые автоматически помещаются в каталог dist , и которым присваивается имя проекта с номером версии. Можете попробовать сразу поставить его себе в виртуальное окружение: $ python setup.py install . После проверки всего одна команда $ python setup.py register sdist upload опубликует Ваш пакет.
Есть один момент, с которым я боролся очень долго - pip не понимает файлы README в формате .md, пришлось перегонять его в .rst командой
Эта утилита есть в репах Ubuntu, так что ставится через apt-get.
Ну что ж, мы создали полезную утилитку и сделали её доступной для всех :) Надеюсь, кому-нибудь пригодится :)
Читайте также: