[Calypso] [PATCH 4/4] Add a urlpath attribute rather than special casing in propfind().

Jelmer Vernooij jelmer at jelmer.uk
Sun May 15 15:35:32 PDT 2016


From: Jelmer Vernooń≥ <jelmer at jelmer.uk>

---
 calypso/webdav.py   | 16 +++++++++-------
 calypso/xmlutils.py |  2 +-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/calypso/webdav.py b/calypso/webdav.py
index 4b52d67..d0e2a44 100644
--- a/calypso/webdav.py
+++ b/calypso/webdav.py
@@ -57,11 +57,12 @@ def find_vobject_value(vobject, name):
             return value
     return None
 
+
 class Item(object):
 
     """Internal item. Wraps a vObject"""
 
-    def __init__(self, text, name=None, path=None):
+    def __init__(self, text, name=None, path=None, parent_urlpath=None):
         """Initialize object from ``text`` and different ``kwargs``."""
 
         self.log = logging.getLogger(__name__)
@@ -105,6 +106,7 @@ class Item(object):
 
         self.path = path
         self.name = self.object.x_calypso_name.value
+        self.urlpath = "/".join([parent_urlpath, self.name])
         self.tag = self.object.name
         self.etag = hashlib.sha1(text).hexdigest()
 
@@ -254,7 +256,7 @@ class Collection(object):
 
     def read_file(self, path):
         text = codecs.open(path,encoding='utf-8').read()
-        item = Item(text, None, path)
+        item = Item(text, None, path, self.urlpath)
         return item
 
     def insert_file(self, path):
@@ -503,7 +505,7 @@ class Collection(object):
 
         self.log.debug('append name %s', name)
         try:
-            new_item = Item(text, name, None)
+            new_item = Item(text, name, None, self.urlpath)
         except Exception, e:
             self.log.exception("Cannot create new item")
             raise
@@ -530,7 +532,7 @@ class Collection(object):
             path = old_item.path
 
         try:
-            new_item = Item(text, name, path)
+            new_item = Item(text, name, path, self.urlpath)
         except Exception:
             self.log.exception("Failed to replace %s", name)
             raise
@@ -571,16 +573,16 @@ class Collection(object):
                         if ve.contents.has_key('dtstart') and ve.contents.has_key('duration'):
                             del ve.contents['duration']
                         new_ics.vevent_list = [ve]
-                        new_item = Item(new_ics.serialize().decode('utf-8'), None, path)
+                        new_item = Item(new_ics.serialize().decode('utf-8'), None, path, self.urlpath)
                         self.import_item(new_item, path)
                 else:
-                    new_item = Item(new_ics.serialize().decode('utf-8'), None, path)
+                    new_item = Item(new_ics.serialize().decode('utf-8'), None, path, self.urlpath)
                     self.import_item(new_item, path)
             return True
         except Exception, ex:
             self.log.exception("Failed to import: %s", path)
             return False
-        
+
     def write(self, headers=None, items=None):
         return True
 
diff --git a/calypso/xmlutils.py b/calypso/xmlutils.py
index e01fcb0..d692b32 100644
--- a/calypso/xmlutils.py
+++ b/calypso/xmlutils.py
@@ -146,7 +146,7 @@ def propfind(path, xml_request, collection, depth, context):
         multistatus.append(response)
 
         href = ET.Element(_tag("D", "href"))
-        href.text = collection_name if is_collection else "/".join([collection_name, item.name])
+        href.text = item.urlpath
         response.append(href)
 
         propstat = ET.Element(_tag("D", "propstat"))
-- 
2.8.1



More information about the Calypso mailing list