Skip to content

Instantly share code, notes, and snippets.

@kartoch
Created November 16, 2016 15:51
Show Gist options
  • Save kartoch/ee19b10913bc76e89d59e316a5d33822 to your computer and use it in GitHub Desktop.
Save kartoch/ee19b10913bc76e89d59e316a5d33822 to your computer and use it in GitHub Desktop.
Recursive webdav upload using easywebdav
[Main]
namespace: # webdav server
login: # login
local_dir: # local directory
remote_dir: # remote directory
import logging
import os
import ConfigParser
import easywebdav
import getpass
logging.basicConfig(level=logging.DEBUG)
def enumerate_webdav_directory(webdav, directory):
list_files = []
for filename in webdav.ls(directory):
logging.debug("Get filename: " + str(filename))
if directory == filename.name:
logging.debug("same directory, discarding: " + filename.name)
continue
if filename.name.endswith('/'):
logging.debug("directory: " + filename.name)
list_files += enumerate_webdav_directory(webdav, filename.name)
else:
logging.debug("file: " + filename.name)
list_files.append(filename)
return list_files
if __name__ == "__main__":
settings = ConfigParser.ConfigParser()
settings.read('config.ini')
namespace = settings.get('Main', 'namespace')
login = settings.get('Main', 'login')
local_dir = settings.get('Main', 'local_dir')
remote_dir = settings.get('Main', 'remote_dir')
password = getpass.getpass()
dav = easywebdav.connect(namespace, protocol='https', username=login, password=password)
for f in enumerate_webdav_directory(dav,remote_dir):
logging.info("delete " + f.name)
dav.delete(f.name)
for dirname, dirnames, filenames in os.walk(local_dir):
for d in dirnames:
create_dir = os.path.relpath(os.path.join(dirname, d),local_dir)
logging.info("create dir " + create_dir)
dav.mkdirs(os.path.join(remote_dir, create_dir))
for f in filenames:
upload_file = os.path.relpath(os.path.join(dirname, f),local_dir)
logging.info("upload file " + upload_file)
dav.upload(os.path.join(local_dir, upload_file), os.path.join(remote_dir, upload_file))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment