Fix a lot of details
This commit is contained in:
parent
406027f3c9
commit
e586569b31
@ -429,7 +429,7 @@ class Application(object):
|
|||||||
props = xmlutils.props_from_request(content)
|
props = xmlutils.props_from_request(content)
|
||||||
# TODO: use this?
|
# TODO: use this?
|
||||||
# timezone = props.get("C:calendar-timezone")
|
# timezone = props.get("C:calendar-timezone")
|
||||||
collection = storage.create_collection(
|
collection = storage.Collection.create_collection(
|
||||||
collection.path, tag="VCALENDAR")
|
collection.path, tag="VCALENDAR")
|
||||||
for key, value in props.items():
|
for key, value in props.items():
|
||||||
collection.set_meta(key, value)
|
collection.set_meta(key, value)
|
||||||
@ -444,7 +444,7 @@ class Application(object):
|
|||||||
collection = write_collections[0]
|
collection = write_collections[0]
|
||||||
|
|
||||||
props = xmlutils.props_from_request(content)
|
props = xmlutils.props_from_request(content)
|
||||||
collection = storage.create_collection(collection.path)
|
collection = storage.Collection.create_collection(collection.path)
|
||||||
for key, value in props.items():
|
for key, value in props.items():
|
||||||
collection.set_meta(key, value)
|
collection.set_meta(key, value)
|
||||||
return client.CREATED, {}, None
|
return client.CREATED, {}, None
|
||||||
|
@ -127,7 +127,7 @@ def authorized(user, collection, permission):
|
|||||||
If the user is empty, check for anonymous rights.
|
If the user is empty, check for anonymous rights.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
collection_url = collection.url.rstrip("/") or "/"
|
collection_url = collection.path.rstrip("/") or "/"
|
||||||
if collection_url in (".well-known/carddav", ".well-known/caldav"):
|
if collection_url in (".well-known/carddav", ".well-known/caldav"):
|
||||||
return permission == "r"
|
return permission == "r"
|
||||||
rights_type = config.get("rights", "type").lower()
|
rights_type = config.get("rights", "type").lower()
|
||||||
|
@ -180,17 +180,17 @@ class Collection:
|
|||||||
collection = cls(path, principal)
|
collection = cls(path, principal)
|
||||||
yield collection
|
yield collection
|
||||||
if depth != "0":
|
if depth != "0":
|
||||||
|
# TODO: fix this
|
||||||
items = list(collection.list())
|
items = list(collection.list())
|
||||||
if items:
|
if items:
|
||||||
for item in items:
|
for item in items:
|
||||||
yield collection.get(item[0])
|
yield collection.get(item[0])
|
||||||
else:
|
else:
|
||||||
_, directories, files = next(os.walk(collection._filesystem_path))
|
_, directories, _ = next(os.walk(collection._filesystem_path))
|
||||||
for sub_path in directories + files:
|
for sub_path in directories:
|
||||||
full_path = os.path.join(collection._filesystem_path, sub_path)
|
full_path = os.path.join(collection._filesystem_path, sub_path)
|
||||||
if os.path.exists(path_to_filesystem(full_path)):
|
if os.path.exists(path_to_filesystem(full_path)):
|
||||||
collection = cls(posixpath.join(path, sub_path))
|
yield cls(posixpath.join(path, sub_path))
|
||||||
yield collection
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_collection(cls, href, collection=None, tag=None):
|
def create_collection(cls, href, collection=None, tag=None):
|
||||||
@ -364,7 +364,7 @@ class Collection:
|
|||||||
items = []
|
items = []
|
||||||
for href in os.listdir(self._filesystem_path):
|
for href in os.listdir(self._filesystem_path):
|
||||||
path = os.path.join(self._filesystem_path, href)
|
path = os.path.join(self._filesystem_path, href)
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path) and not path.endswith(".props"):
|
||||||
with open(path, encoding=STORAGE_ENCODING) as fd:
|
with open(path, encoding=STORAGE_ENCODING) as fd:
|
||||||
items.append(vobject.readOne(fd.read()))
|
items.append(vobject.readOne(fd.read()))
|
||||||
if self.get_meta("tag") == "VCALENDAR":
|
if self.get_meta("tag") == "VCALENDAR":
|
||||||
@ -377,6 +377,7 @@ class Collection:
|
|||||||
return collection.serialize()
|
return collection.serialize()
|
||||||
elif self.get_meta("tag") == "VADDRESSBOOK":
|
elif self.get_meta("tag") == "VADDRESSBOOK":
|
||||||
return "".join([item.serialize() for item in items])
|
return "".join([item.serialize() for item in items])
|
||||||
|
return ""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def etag(self):
|
def etag(self):
|
||||||
|
@ -239,7 +239,18 @@ def _propfind_response(path, item, props, user, write=False):
|
|||||||
response = ET.Element(_tag("D", "response"))
|
response = ET.Element(_tag("D", "response"))
|
||||||
|
|
||||||
href = ET.Element(_tag("D", "href"))
|
href = ET.Element(_tag("D", "href"))
|
||||||
uri = item.path if is_collection else "%s/%s" % (path, item.href)
|
if is_collection:
|
||||||
|
uri = item.path
|
||||||
|
else:
|
||||||
|
# TODO: fix this
|
||||||
|
if path.split("/")[-1] == item.href:
|
||||||
|
# Happening when depth is 0
|
||||||
|
uri = path
|
||||||
|
else:
|
||||||
|
# Happening when depth is 1
|
||||||
|
uri = "/".join((path, item.href))
|
||||||
|
|
||||||
|
# TODO: fix this
|
||||||
href.text = _href(uri.replace("//", "/"))
|
href.text = _href(uri.replace("//", "/"))
|
||||||
response.append(href)
|
response.append(href)
|
||||||
|
|
||||||
@ -549,8 +560,15 @@ def report(path, xml_request, collection):
|
|||||||
else:
|
else:
|
||||||
not_found_props.append(element)
|
not_found_props.append(element)
|
||||||
|
|
||||||
|
# TODO: fix this
|
||||||
|
if hreference.split("/")[-1] == item.href:
|
||||||
|
# Happening when depth is 0
|
||||||
|
uri = "/" + hreference
|
||||||
|
else:
|
||||||
|
# Happening when depth is 1
|
||||||
|
uri = posixpath.join(hreference, item.href)
|
||||||
multistatus.append(_item_response(
|
multistatus.append(_item_response(
|
||||||
posixpath.join(hreference, item.href), found_props=found_props,
|
uri, found_props=found_props,
|
||||||
not_found_props=not_found_props, found_item=True))
|
not_found_props=not_found_props, found_item=True))
|
||||||
|
|
||||||
return _pretty_xml(multistatus)
|
return _pretty_xml(multistatus)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user