Menu

[r18]: / python_webdav / client.py  Maximize  Restore  History

Download this file

87 lines (77 with data), 3.1 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
""" Client Module
"""
import os
import python_webdav.connection as conn
class Client(object):
""" Client object
"""
def __init__(self, webdav_server_uri, webdav_path='.', port=80, realm=''):
""" Client object
"""
self._connection_settings = dict(host=webdav_server_uri,
path=webdav_path,
port=port, realm=realm)
self.connection = None
def set_connection(self, username='', password=''):
""" Set up the connection object
"""
self._connection_settings['username'] = username
self._connection_settings['password'] = password
self.connection = conn.Connection(self._connection_settings)
def download_file(self, file_path, dest_path='.'):
""" Download a file from file_path to dest_path
"""
resp, content = self.connection.send_get(file_path)
file_name = os.path.basename(file_path)
write_to_path = os.path.join(dest_path, file_name)
try:
file_fd = open(write_to_path, 'wb')
file_fd.write(content)
except IOError:
raise
finally:
file_fd.close()
return resp, content
def chdir(self, directory):
""" Change directory from whatever current dir is to directory specified
"""
# Make sure there's a leading '/'
if not self.connection.path.startswith('/'):
self.connection.path = '/' + self.connection.path
self.connection.path = os.path.realpath(
os.path.join(self.connection.path, directory))
def mkdir(self, path):
""" Make a directory (collection). If path does not start with '/'
it is assumed to be relative to the current working directory.
"""
if not path.startswith('/'):
path = self.connection.path + '/' + path
self.connection.send_mkcol(path)
# ---------------- UNFINISHED --------------- #
def ls(self, path, list_format=('F','C','M')):
"""
list_format: This is the format for the directory listing
The format symbals are:
T - Type (resourcetype)
D - Date Time (creationdate)
F - Filename (href)
M - Last modified time (getlastmodified)
A - Attributes (executable)
E - ETag (getetag)
C - Content type (getcontenttype)
"""
# Format Map
format_map = {'T': 'resourcetype',
'D': 'creationdate',
'F': 'href',
'M': 'getlastmodified',
'A': 'executable',
'E': 'getetag',
'C': 'getcontenttype'}
# Get the properties for the given path
props = self.connection.send_propfind(path)
for prop in props:
format_string = ''
for symbol in list_format:
format_string += getattr(prop, format_map[symbol])
print format_string