Webdav API, resource API и wdc для WebDAV-серверов (Yandex.Disk, Dropbox, Google Disk, Box, 4shared и т.д.)
Project description
Webdavclient
Пакет Webdavclient обеспечивает легкую и удобную работу с WebDAV-серверами (Яндекс.Диск, Dropbox, Google Диск, Box, 4shared и т.д.). В данный пакет включены следующие компоненты: webdav API, resource API и wdc.
Исходный код проекта можно посмотреть здесь
Установка и обновление
Установка
Linux
$ sudo apt-get install libxml2-dev libxslt-dev python-dev
$ sudo apt-get install libcurl4-openssl-dev python-pycurl
$ sudo easy_install webdavclient
Mac OS X
curl https://bootstrap.pypa.io/ez_setup.py -o - | python
python setup.py install --prefix=/opt/setuptools
sudo easy_install pip
Обновление
$ sudo pip install -U webdavclient
Webdav API
Webdav API - представляет из себя набор webdav-методов работы с облачными хранилищами. В этот набор входят следующие методы: check, free, info, list, mkdir, clean, copy, move, download, upload, publish и unpublish.
Настройка клиента
Обязательными ключами для настройки соединения клиента с WevDAV-сервером являются webdav_hostname и webdav_login, webdav_password.
import webdav.client as wc
options = {
'webdav_hostname': "https://webdav.server.ru",
'webdav_login': "login",
'webdav_password': "password"
}
client = wc.Client(options)
При наличие прокси-сервера необходимо указать настройки для подключения через него.
import webdav.client as wc
options = {
'webdav_hostname': "https://webdav.server.ru",
'webdav_login': "w_login",
'webdav_password': "w_password",
'proxy_hostname': "http://127.0.0.1:8080",
'proxy_login': "p_login",
'proxy_password': "p_password"
}
client = wc.Client(options)
При необходимости использования сертификата, путь к сертификату и приватному ключу задается следующим образом:
import webdav.client as wc
options = {
'webdav_hostname': "https://webdav.server.ru",
'webdav_login': "w_login",
'webdav_password': "w_password",
'cert_path': "/etc/ssl/certs/certificate.crt",
'key_path': "/etc/ssl/private/certificate.key"
}
client = wc.Client(options)
Синхронные методы
Проверка существования ресурса
client.check("dir1/file1")
client.check("dir1")
Получение информации о ресурсе
client.info("dir1/file1")
client.info("dir1/")
Проверка свободного места
free_size = client.free()
Получение списка ресурсов
files1 = client.list()
files2 = client.list("dir1")
Создание директории
client.mkdir("dir1/dir2")
Удаление ресурса
client.clean("dir1/dir2")
Копирование ресурса
client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
client.copy(remote_path_from="dir2", remote_path_to="dir3")
Перемещения ресурса
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
client.move(remote_path_from="dir2", remote_path_to="dir3")
Загрузка ресурса
client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1")
client.download_sync(remote_path="dir1/dir2/", local_path="~/Downloads/dir2/")
Выгрузка ресурса
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1")
client.upload_sync(remote_path="dir1/dir2/", local_path="~/Documents/dir2/")
Публикация ресурса
link = client.publish("dir1/file1")
link = client.publish("dir2")
Отмена публикации ресурса
client.unpublish("dir1/file1")
client.unpublish("dir2")
Обработка исключений
from webdav.client import WebDavException
try:
...
except WebDavException as exception:
...
Получение недостающих файлов
client.pull(remote_directory='dir1', local_directory='~/Documents/dir1')
Отправка недостающих файлов
client.push(remote_directory='dir1', local_directory='~/Documents/dir1')
Асинхронные методы
Загрузка ресурса
client.download_async(remote_path="dir1/file1", local_path="~/Downloads/file1", callback=callback)
client.download_async(remote_path="dir1/dir2/", local_path="~/Downloads/dir2/", callback=callback)
Выгрузка ресурса
client.upload_async(remote_path="dir1/file1", local_path="~/Documents/file1", callback=callback)
client.upload_async(remote_path="dir1/dir2/", local_path="~/Documents/dir2/", callback=callback)
Resource API
Resource API - используя концепцию ООП, обеспечивает работу с облачными хранилищами на уровне ресурсов.
Получение ресурса
res1 = client.resource("dir1/file1")
Работа с ресурсом
res1.rename("file2")
res1.move("dir1/file2")
res1.copy("dir2/file1")
info = res1.info()
res1.read_from(buffer)
res1.read(local_path="~/Documents/file1")
res1.read_async(local_path="~/Documents/file1", callback)
res1.write_to(buffer)
res1.write(local_path="~/Downloads/file1")
res1.write_async(local_path="~/Downloads/file1", callback)
wdc
wdc - кросплатформенная утилита, обеспечивающая удобную работу с WebDAV-серверами прямо из Вашей консоли. Помимо полной реализации методов из webdav API, также добавлены методы синхронизации содержимого локальной и удаленной директорий.
Аутентификация
$ wdc login https://wedbav.server.ru -p http://127.0.0.1:8080
webdav_login: w_login
webdav_password: w_password
proxy_login: p_login
proxy_password: p_password
Также имеются дополнительные ключи --root[-r], --cert-path[-c] и --key-path[-k].
Пример работы с утилитой
$ wdc check
success
$ wdc check file1
not success
$ wdc free
245234120344
$ wdc ls dir1
file1
...
fileN
$ wdc mkdir dir2
$ wdc copy dir1/file1 -t dir2/file1
$ wdc move dir2/file1 -t dir2/file2
$ wdc download dir1/file1 -t ~/Downloads/file1
$ wdc download dir1/ -t ~/Downloads/dir1/
$ wdc upload dir2/file2 -f ~/Documents/file1
$ wdc upload dir2/ -f ~/Documents/
$ wdc publish di2/file2
https://yadi.sk/i/vWtTUcBucAc6k
$ wdc unpublish dir2/file2
$ wdc pull dir1/ -t ~/Documents/dir1/
$ wdc push dir1/ -f ~/Documents/dir1/
$ wdc info dir1/file1
{'name': 'file1', 'modified': 'Thu, 23 Oct 2014 16:16:37 GMT',
'size': '3460064', 'created': '2014-10-23T16:16:37Z'}
WebDAV-сервера
Поддерживаемые методы
Сервисы |
free |
info |
list |
mkdir |
clean |
copy |
move |
download |
upload |
---|---|---|---|---|---|---|---|---|---|
Яндекс.Диск |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Dropbox |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
Google Диск |
- |
+ |
+ |
+ |
+ |
- |
- |
+ |
+ |
Box |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
4shared |
- |
+ |
+ |
+ |
- |
- |
+ |
+ |
+ |
Методы publish и unpublish поддерживает только Яндекс.Диск.
Настройка подключения
Для работы с облачными хранилащами Dropbox и Google Диск по протоколу WebDAV необходимо использовать WebDAV-сервера DropDAV и DAV-pocket соответственно.
Список настроек для WebDAV - серверов:
webdav-servers:
- yandex:
hostname: https://webdav.yandex.ru
login: #login_for_yandex
password: #pass_for_yandex
- dropbox:
hostname: https://dav.dropdav.com
login: #login_for dropdav
password: #pass_for_dropdav
- google
hostname: https://dav-pocket.appspot.com/docs/
login: #login_for_dav-pocket
password: #pass_for_dav-pocket
- box:
hostname: https://dav.box.com
root: dav
login: #login_for_box
password: #pass_for_box
- 4shared:
hostname: https://webdav.4shared.com
login: #login_for_4shared
password: #pass_for_4shared
Включение autocomplete
Для Mac OS X или старых Unix-систем необходимо обновить bash.
brew install bash
chsh
brew install bash-completion
Autocomplete можно включить глобально
activate-global-python-argcomplete --dest=path/to/bash_completion.d/
или локально
#.bashrc
eval "$(register-python-argcomplete wdc)"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.