Created
November 16, 2016 15:51
-
-
Save kartoch/ee19b10913bc76e89d59e316a5d33822 to your computer and use it in GitHub Desktop.
Recursive webdav upload using easywebdav
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Main] | |
namespace: # webdav server | |
login: # login | |
local_dir: # local directory | |
remote_dir: # remote directory |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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