2009-10-08 13 views
22

Me gustaría implementar una funcionalidad en mi aplicación que carga y manipula 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. Google ha encontrado algunas opciones para WebDAV en Python, pero me gustaría saber cuáles son las más utilizadas actualmente.Biblioteca de cliente Python para WebDAV

Respuesta

1

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. Hay davfs2 por ahí y algunos sistemas operativos, como Mac OS X, tiene el apoyo del sistema de archivos WebDAV incorporado.

+0

Sí, esa es sin duda otra opción. Si voy a montarlo, también podría usar NFS, pero el montaje es lo que estaba tratando de evitar con el uso de WebDAV en primer lugar. –

+0

+1 para la solución de montaje. Esta es la manera en que Unix resuelve estos problemas. @Kamil ¿Cuáles fueron sus argumentos en contra del montaje, por lo que decidió buscar una biblioteca WebDAV? –

+1

-1 El montaje de sistemas de archivos de red como s3, dav, sshfs que no se crearon con ese uso en mente (en comparación con NFS/SMB) son una fuente interminable de problemas en la práctica. Los errores de red transitorios generalmente son muy poco comunicados a la aplicación o causan bloqueos. Los patrones de acceso imprevistos por el desarrollador del controlador requieren amplios apretones de manos con el servidor y, por lo tanto, latencias inaceptables, en otros cachés laterales tienden a causar inconsistencias. – Juraj

9

acabo tuve una necesidad similar y terminé probando algunos clientes de Python WebDAV para mis necesidades (cargando y descargando archivos de un servidor WebDAV). Aquí hay un resumen de mi experiencia:

1) La que funcionó para mí es python-webdav-lib.

No hay mucha documentación, pero un vistazo rápido al código (en particular el ejemplo) fue suficiente para encontrar la manera de hacerlo funcionar.

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.

+1

thx para el análisis, probablemente algunas cosas han cambiado sice - 1) python-webdav-lib y Python_WebDAV_Library-0.3.0 son idénticas – mykhal

+2

python-webdav-lib referenciadas anteriormente - funcionó muy bien para mí y fue una respuesta mucho mejor/más útil que el aceptado. –

43

Es triste que para esta pregunta ("¿Qué biblioteca webdav de Python usar?"), Que seguro interesa a más de una persona, se aceptó la respuesta no relacionada ("no use la biblioteca webdav de Python"). Bueno, problema común en Stackexchange.

Para las personas que estarán buscando respuestas reales y teniendo en cuenta los requisitos de la pregunta original (API simple similar al módulo "os"), puedo sugerir easywebdav, que tiene API muy sencilla e incluso una implementación sencilla y sencilla ofreciendo carga/descarga y pocos métodos de administración de archivos/directorios. Debido a la implementación simple, hasta ahora no es compatible con la lista de directorios, pero el error fue filed, y el autor tiene la intención de agregarlo.

+2

Se ha implementado la publicación del directorio como puede ver https://github.com/amnong/easywebdav/pull/4. – Impiastro

+0

Esta biblioteca funciona muy bien. Acabo de probar en Mavericks: ls, descargar, cargar e incluso hay una función privada de "envío" para que pueda enviar solicitudes de obtención arbitrarias. Funciona para mí y es python :) – chrisallick

+1

Desafortunadamente no tiene soporte para Python 3, y las solicitudes de extracción no se procesan. Todavía estoy buscando una buena alternativa ... – blootsvoets

2
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") 
0

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") 

Enlaces:

  • El código fuente here
  • de paquetes here
Cuestiones relacionadas