Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Библиотека webdav3. Пример программного доступа к облаку mail.ru

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Доступ к облаку mail.ru на языке python с помощью библиотеки webdav3

Лично я храню все свои данные в облаках. В основном на yandex.disk, но использую также и mail.ru. Но вот есть смысл поговорить и о программном доступе к облачным ресурсам. Обычно для доступа используется протокол WebDAV. Протокол работает поверх протокола HTTP 1.1.

Для доступа по протоколу WebDAV есть библиотека webdav3. В данной статье мы рассмотрим эту библиотеку для доступа к облачному сервису mail.ru. Кстати для доступа к облаку yandex есть специальные библиотеки, например yadisk. Может быть я напишу статью и об этой библиотеке.

На этот раз я не стал писать "большую" программу, где присутствуют основные функции работы с облаком. Я написал восемь маленьких программок, каждая из которых выполняет только одно действие. Параметры вводятся в командной строке. По вашему усмотрению можно просто посмотреть, как выполняются те или иные действия в облаках mail.ru или как-то объединить эти программы.

Прежде чем эти программы у вас заработают, однако, нужно

  1. Получить почтовый аккаунт на mail.ru и, соответственно, в придачу маленькое облако в 8 Гб.
  2. Установить у себя библиотеку webdav3, обычным образом (pip или pip3), а также библиотеку urllib3, если она у вас не установлена.
  3. Получить пароль для вашего приложения по ссылке. Пароль, который вы имеете для почты, здесь не подойдёт.
  4. В начале вашего приложения должна обязательно выполняться строка
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning),
    которая отключает предупреждение InsecureRequestWarning, которое генерируется при выполнении непроверенного запроса HTTPS.
  5. Также необходимо выполнять строку
    webdav3.client.verify = False
    для отключения проверки SSL-сертификатов.

Все основные действия можно реализовать, импортировав класс webdav3.client, хотя библиотека имеет и другие интересные классы. Далее все действия основываются на методах класса webdav3.client.

Замечание 1
Файловая система облака строится как это обычно бывает в Unix-подобных системах. Есть корневой каталог /, и от этого корня уже растут все остальные каталоги.

Замечание 2
Напомню, что если параметр командной строки содержит пробелы, то его следует брать в кавычки.

Действие 1. Получить список каталогов и файлов в указанном каталоге. Метод webdav3.client.list(). Также используется метод webdav3.client.free(), который возвращает свободный объем облака.

list.py. Получить список каталогов и файлов. Текст программы см. ниже по ссылке
list.py. Получить список каталогов и файлов. Текст программы см. ниже по ссылке
primer311.py

Например

./list.py /

Результат выполнения

Свободно около: 8192 мб
Папка: /
inf.py Новая папка/ 11.docx d_n1/

Или

./list.py /d_n1

Результат выполнения

Свободно около: 8192 мб
Папка: /d_n1
inff 1.docx

Действие 2. Узнать, является ли объект каталогом или файлом. Получаем в начале объект webdav3.client.resource(), а далее используем метод info(), который возвращает словарик. Если длина равна None, то это каталог, в противном случае это файл. Всё остальное нас не интересует.

inf.py. Определяет является ли элемент каталогом или файлом. Текст программы см. по ссылке ниже
inf.py. Определяет является ли элемент каталогом или файлом. Текст программы см. по ссылке ниже
primer312.py

Например

./inf.py /d_n11

Результат выполнения

Папка

Действие 3. Удаление объектов из облака в корзину. Для этого используется метод webdav3.client.clear(). Удалять можно и файл и папку с вложениями. Из, корзины, можно восстановить, в противном случае, корзина чиститься через некоторое время.

delfd.py. Удаляет в корзину каталог или файл. Текст программы см. ниже по ссылке
delfd.py. Удаляет в корзину каталог или файл. Текст программы см. ниже по ссылке
primer313.py

Например

./delfd.py /d_n1/inff

Действие 4. Закачка в облако файла или целого каталога. Используем метод webdav3.client.upload_sync().

upload.py. Закачать файл или каталог в приложение. Текст программы см. ниже по ссылке
upload.py. Закачать файл или каталог в приложение. Текст программы см. ниже по ссылке
primer314.py

Например

./upload.py "./new" "/new"

Каталог ./new на локальном диске копируется в каталог /new в облаке. Каталог может содержать подкаталоги. Аналогично копируется файл, команде всё равно.

Действие 5. Создание каталога в облаке. Используем метод webdav3.client.mkdir().

crdir.py. Создание каталога. Текст программы см. ниже по ссылке
crdir.py. Создание каталога. Текст программы см. ниже по ссылке
primer315.py

Например

./crdir.py /dir2

Создаётся каталог в корне.

./crdir.py /dir1/ty

Создаётся каталог ty в существующем каталоге dir1.

Действие 6. Скачать каталог или файл из облака на локальный диск. Используем метод webdav3.client.download().

download.py. Скачать из облака файл или каталог. Текст программы см. ниже по ссылке
download.py. Скачать из облака файл или каталог. Текст программы см. ниже по ссылке
primer316.py

Например

./download.py /dn_n1 ./dn_n1

Скачивает каталог вместе с подкаталогами из облака на локальный диск

Или

./download.py /txt ./txt2

Скачивает файл txt в файл txt2

Действие 7. Копирование файла или каталога в облаке. Используем метод webdav3.client.copy().

cp.py. Копирование файла или каталога в облаке. Текст программы см. ниже по ссылке
cp.py. Копирование файла или каталога в облаке. Текст программы см. ниже по ссылке
primer317.py

Например

./cp.py /txt "/dn_n1/Новая папка/txt2"

Действие 8. Перенос или переименование файла или каталога. Используем метод webdav3.client.move().

move.py. Перемещение каталога или файла в облаке. Текст программы см. ниже по ссылке
move.py. Перемещение каталога или файла в облаке. Текст программы см. ниже по ссылке
primer318.py

Например

Переименование файла txt в text.txt

./move.py /txt /text.txt

Перемещение папки new в папку dir1

./move.py /new /dir1/new

Мне показалось, что указанных действий вполне достаточно, чтобы строить приложение для работы с облаком mail.ru по протоколу WebDAV. А корзина? - спросите вы. Да бросьте, какие пошлости, это вас Microsoft испортил.

Ну, пока всё!

Базовый курс программирования на Python | programmer's notes (python and more) | Дзен

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Над домами, домами, домами голубые висят облака — вот они и останутся с нами на века, на века, на века.
Над домами, домами, домами голубые висят облака — вот они и останутся с нами на века, на века, на века.