Fix uploading of whole address books

This commit is contained in:
Unrud 2017-07-01 00:11:00 +02:00
parent 69086c6d70
commit c135dc026d
2 changed files with 7 additions and 7 deletions

View File

@ -824,17 +824,21 @@ class Application:
content_type = environ.get("CONTENT_TYPE", "").split(";")[0] content_type = environ.get("CONTENT_TYPE", "").split(";")[0]
tags = {value: key for key, value in xmlutils.MIMETYPES.items()} tags = {value: key for key, value in xmlutils.MIMETYPES.items()}
tag = tags.get(content_type) tag = tags.get(content_type)
if items and items[0].name == "VCALENDAR":
tag = "VCALENDAR"
elif items and items[0].name == "VCARD":
tag = "VADDRESSBOOK"
if write_whole_collection: if write_whole_collection:
try: try:
new_item = self.Collection.create_collection( new_item = self.Collection.create_collection(
path, items, {"tag": tag}) path, items, {"tag": tag} if tag else None)
except ValueError as e: except ValueError as e:
self.logger.warning( self.logger.warning(
"Bad PUT request on %r: %s", path, e, exc_info=True) "Bad PUT request on %r: %s", path, e, exc_info=True)
return BAD_REQUEST return BAD_REQUEST
else: else:
if tag: if tag and not parent_item.get_meta("tag"):
parent_item.set_meta({"tag": tag}) parent_item.set_meta({"tag": tag})
href = posixpath.basename(path.strip("/")) href = posixpath.basename(path.strip("/"))
try: try:

View File

@ -708,10 +708,6 @@ class Collection(BaseCollection):
sane_path = sanitize_path(href).strip("/") sane_path = sanitize_path(href).strip("/")
filesystem_path = path_to_filesystem(folder, sane_path) filesystem_path = path_to_filesystem(folder, sane_path)
if not props:
props = {}
if not props.get("tag") and collection:
props["tag"] = collection[0].name
if not props: if not props:
cls._makedirs_synced(filesystem_path) cls._makedirs_synced(filesystem_path)
return cls(sane_path) return cls(sane_path)
@ -747,7 +743,7 @@ class Collection(BaseCollection):
vobject_items.get, suffix=".ics") vobject_items.get, suffix=".ics")
vobject_items[href] = new_collection vobject_items[href] = new_collection
self._upload_all_nonatomic(vobject_items) self._upload_all_nonatomic(vobject_items)
elif props.get("tag") == "VCARD": elif props.get("tag") == "VADDRESSBOOK":
vobject_items = {} vobject_items = {}
for card in collection: for card in collection:
# href must comply to is_safe_filesystem_path_component # href must comply to is_safe_filesystem_path_component