diff --git a/vdirsyncer/storage/dav.py b/vdirsyncer/storage/dav.py
index c47c5a5..fcc1927 100644
--- a/vdirsyncer/storage/dav.py
+++ b/vdirsyncer/storage/dav.py
@@ -38,11 +38,17 @@ def _normalize_href(base, href, decoding_rounds=1):
class Discover(object):
-
- xml_home = None
- xml_collection = None
-
- str_homeset = None
+ _resourcetype = None
+ _homeset_xml = None
+ _homeset_tag = None
+ _collection_xml = """
+
+
+
+
+
+
+ """
def __init__(self, session):
self.session = session
@@ -85,51 +91,27 @@ class Discover(object):
headers = self.session.get_default_headers()
headers['Depth'] = 0
response = self.session.request('PROPFIND', principal, headers=headers,
- data=self.xml_home,
+ data=self._homeset_xml,
is_subpath=False)
root = etree.fromstring(response.content)
- for element in root.iter(self.str_homeset):
+ for element in root.iter(self._homeset_tag):
for homeset in element.iter():
if homeset.tag.endswith('href'):
yield homeset.text
- def _find_collections(self, home):
- raise NotImplementedError()
-
-
-class CalDiscover(Discover):
-
- xml_home = """
-
-
-
-
-
- """
- xml_collection = """
-
-
-
-
-
-
-
- """
- str_homeset = '{*}calendar-home-set'
-
def _find_collections(self, home):
"""find all CalDAV collections under `home`"""
headers = self.session.get_default_headers()
headers['Depth'] = 1
response = self.session.request('PROPFIND', home, headers=headers,
- data=self.xml_collection,
+ data=self._collection_xml,
is_subpath=False)
root = etree.XML(response.content)
for response in root.iter('{*}response'):
prop = response.find('{*}propstat/{*}prop')
- if prop.find('{*}resourcetype/{*}calendar') is None:
+ if prop.find('{*}resourcetype/{*}' + self._resourcetype) is None:
continue
displayname = prop.find('{*}displayname')
@@ -138,51 +120,31 @@ class CalDiscover(Discover):
'displayname': '' if displayname is None else displayname.text
}
- component_set = prop.find('{*}supported-calendar-component-set')
- if component_set is not None:
- for one in component_set:
- collection[one.get('name')] = True
-
yield collection
+class CalDiscover(Discover):
+ _resourcetype = 'calendar'
+ _homeset_xml = """
+
+
+
+
+
+ """
+ _homeset_tag = '{*}calendar-home-set'
+
+
class CardDiscover(Discover):
- xml_home = """
+ _resourcetype = 'addressbook'
+ _homeset_xml = """
"""
- xml_collection = """
-
-
-
-
-
-
- """
- str_homeset = '{*}addressbook-home-set'
-
- def _find_collections(self, home):
- """find all CardDAV collections under `home`"""
- headers = self.session.get_default_headers()
- headers['Depth'] = 1
- response = self.session.request('PROPFIND', home, headers=headers,
- data=self.xml_collection,
- is_subpath=False)
-
- root = etree.XML(response.content)
- for response in root.iter('{*}response'):
- prop = response.find('{*}propstat/{*}prop')
- if prop.find('{*}resourcetype/{*}addressbook') is None:
- continue
-
- displayname = prop.find('{*}displayname')
- yield {
- 'href': response.find('{*}href').text,
- 'displayname': '' if displayname is None else displayname.text
- }
+ _homeset_tag = '{*}addressbook-home-set'
class DavSession(object):