Загрузить файл на яндекс диск 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 клика:

  1. разрешить доступ на GitHub
  2. включить для конкретного проекта

TravisCI интерфейс

Вкладка “Settings” обычно скрывается под меню “More options”. Там можно задать переменные окружения, а также периодические выполнения задач, чтобы быть уверенным, что ничего не отвалилось.

Настройки TravisCI

Шилдики

Замечали, что у некоторых проектов в README.md показываются классные иконки со статусом сборки и покрытием? Тоже хочу такие же :)

шилдики YaDiskClient

Все они прописываются в 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.

Ну что ж, мы создали полезную утилитку и сделали её доступной для всех :) Надеюсь, кому-нибудь пригодится :)

Читайте также: