Biblioteca cliente Python para WebDAV
(7)
Me gustaría implementar una pieza de funcionalidad en mi aplicación que cargue y manipule archivos en un servidor WebDAV. Estoy buscando una biblioteca de Python madura que ofrezca una interfaz similar a los módulos os.*
Para trabajar con los archivos remotos. Googlear ha mostrado algunas opciones para WebDAV en Python, pero me gustaría saber cuáles son las más utilizadas en estos días.
Acabo de tener una necesidad similar y terminé probando algunos clientes de Python WebDAV para mis necesidades (cargar y descargar archivos desde un servidor WebDAV). Aquí hay un resumen de mi experiencia:
1) El que funcionó para mí es python-webdav-lib .
No mucha documentación, pero un vistazo rápido al código (en particular el ejemplo) fue suficiente para descubrir cómo hacer que funcione para mí.
2) PyDAV 0.21 (la última versión que encontré) no funciona con Python 2.6 porque usa cadenas como excepciones. No intenté arreglar esto, esperando más incompatibilidades más adelante.
3) davclient 0.2.0 . Lo miré pero no exploré más porque la documentación no mencionaba el nivel de API que estaba buscando (carga y descarga de archivos).
4) Python_WebDAV_Library-0.3.0 . No parece tener ninguna funcionalidad de carga.
Aparentemente estás buscando una biblioteca cliente de WebDAV.
No estoy seguro de cómo surgieron los golpes de gazillion, parece que los siguientes 2 parecen relevantes:
- PyDAV: http://users.sfo.com/~jdavis/Software/PyDAV/readme.html#client
- Zope - y busque client.py
Es triste que para esta pregunta ("¿Qué biblioteca de Python webdav se debe usar?"), Que con seguridad interesa a más de una persona, se aceptó una respuesta no relacionada ("no usar la biblioteca de Python webdav"). Bueno, problema común en Stackexchange.
Para las personas que buscarán respuestas reales, y dados los requisitos de la pregunta original (API simple similar al módulo "os"), puedo sugerir easywebdav , que tiene una API muy sencilla e incluso una implementación sencilla y agradable, que ofrece carga / descarga. y algunos métodos de gestión de archivos / dir. Debido a una implementación simple, hasta el momento no es compatible con la lista de directorios, pero se ha filed error y el autor intenta agregarla.
Instalar:
$ sudo apt-get install libxml2-dev libxslt-dev python-dev
$ sudo apt-get install libcurl4-openssl-dev python-pycurl
$ sudo easy_install webdavclient
Ejemplos:
import webdav.client as wc
options = {
''webdav_hostname'': "https://webdav.server.ru",
''webdav_login'': "login",
''webdav_password'': "password"
}
client = wc.Client(options)
client.check("dir1/file1")
client.info("dir1/file1")
files = client.list()
free_size = client.free()
client.mkdir("dir1/dir2")
client.clean("dir1/dir2")
client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1")
client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1")
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1")
client.download_async(remote_path="dir1/file1", local_path="~/Downloads/file1", callback=callback)
client.upload_async(remote_path="dir1/file1", local_path="~/Documents/file1", callback=callback)
link = client.publish("dir1/file1")
client.unpublish("dir1/file1")
Campo de golf:
No conozco ninguno específicamente, pero, dependiendo de su plataforma, puede ser más sencillo montar y acceder a los archivos servidos por WebDAV a través del sistema de archivos. Ahí hay davfs2 y algunos sistemas operativos, como Mac OS X, tienen soporte de sistema de archivos WebDAV integrado.
No tengo experiencia con ninguna de estas bibliotecas, pero el Índice de paquetes de Python ("PyPi") enumera algunos módulos de webdav .
import easywebdav
webdav = easywebdav.connect(
host=''dav.dumptruck.goldenfrog.com'',
username=''_snip_'',
port=443,
protocol="https",
password=''_snip_'')
_file = "test.py"
print webdav.cd("/dav/")
# print webdav._get_url("")
# print webdav.ls()
# print webdav.exists("/dav/test.py")
# print webdav.exists("ECS.zip")
# print webdav.download(_file, "./"+_file)
print webdav.upload("./test.py", "test.py")