1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from caldavclientlibrary.protocol.url import URL
18 from caldavclientlibrary.protocol.webdav.definitions import davxml
19 import os
20
22 """
23 Maintains data for a WebDAV resource, including list of properties,
24 child resources and actual data.
25 """
26
27 - def __init__(self, session, path, lastmod="", size="", type=""):
38
41
43 return os.path.basename(self.path)
44
47
50
53
55 return self.iscollection
56
57 - def findPath(self, path=None, elements=None):
58 if path:
59 elements = path.lstrip("/").rstrip("/").split("/")
60 if self.listChildren():
61 for child in self.children:
62 if child.getName() == elements[0]:
63 elements = elements[1:]
64 if elements:
65 return child.findPath(elements=elements)
66 else:
67 return child
68 return None
69
71 if self.children:
72 for child in self.children:
73 if child.getName() == name:
74 return child
75 return None
76
78 if self.children is None:
79 resource = URL(url=self.path+"/")
80 props = (
81 davxml.resourcetype,
82 davxml.getlastmodified,
83 davxml.getcontentlength,
84 davxml.getcontenttype,
85 )
86 results = self.session.account.session.getPropertiesOnHierarchy(resource, props)
87 items = results.keys()
88 items.sort()
89 self.children = [Resource(
90 self.session,
91 rurl,
92 lastmod=results[rurl].get(davxml.getlastmodified, ""),
93 size=results[rurl].get(davxml.getcontentlength, ""),
94 type=results[rurl].get(davxml.getcontenttype, ""),
95 ) for rurl in items if rurl != self.path + "/"]
96 return self.children
97
99 resource = URL(url=self.path+"/")
100 props = (davxml.resourcetype,)
101 props += (davxml.getcontentlength, davxml.getlastmodified,)
102 props, _ignore_bad = self.session.account.session.getProperties(resource, props)
103 size = props.get(davxml.getcontentlength, "-")
104 if not size:
105 size = "0"
106 modtime = props.get(davxml.getlastmodified, "-")
107 return ["Size: %s" % (size,), "Modtime: %s" % (modtime,)]
108
118
124
126 data = self.getData()
127 if not self.type.startswith("text/html"):
128 data = "<HTML><BODY>%s</BODY></HTML>" % (data.replace("\r\n", "\n").replace("\r", "\n").replace("\n", "<br>\n"),)
129 return data
130
135