Correct ;component=... in getcontenttype
This commit is contained in:
parent
a2a046f35f
commit
f37b22b682
@ -1140,6 +1140,44 @@ class BaseRequestsMixIn:
|
|||||||
sync_token)
|
sync_token)
|
||||||
assert sync_token == new_sync_token
|
assert sync_token == new_sync_token
|
||||||
|
|
||||||
|
def test_calendar_getcontenttype(self):
|
||||||
|
"""Test report request on an item"""
|
||||||
|
status, _, _ = self.request("MKCALENDAR", "/test/")
|
||||||
|
assert status == 201
|
||||||
|
for component in ("event", "todo", "journal"):
|
||||||
|
event = get_file_content("{}1.ics".format(component))
|
||||||
|
status, _, _ = self.request("PUT", "/test/test.ics", event)
|
||||||
|
assert status == 201
|
||||||
|
status, _, answer = self.request(
|
||||||
|
"REPORT", "/test/",
|
||||||
|
"""<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
<D:prop xmlns:D="DAV:">
|
||||||
|
<D:getcontenttype />
|
||||||
|
</D:prop>
|
||||||
|
</C:calendar-query>""")
|
||||||
|
assert status == 207
|
||||||
|
assert ">text/calendar;charset=utf-8;component=V{}<".format(
|
||||||
|
component.upper()) in answer
|
||||||
|
|
||||||
|
def test_addressbook_getcontenttype(self):
|
||||||
|
"""Test report request on an item"""
|
||||||
|
status, _, _ = self._create_addressbook("/test/")
|
||||||
|
assert status == 201
|
||||||
|
contact = get_file_content("contact1.vcf")
|
||||||
|
status, _, _ = self.request("PUT", "/test/test.vcf", contact)
|
||||||
|
assert status == 201
|
||||||
|
status, _, answer = self.request(
|
||||||
|
"REPORT", "/test/",
|
||||||
|
"""<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||||
|
<D:prop xmlns:D="DAV:">
|
||||||
|
<D:getcontenttype />
|
||||||
|
</D:prop>
|
||||||
|
</C:calendar-query>""")
|
||||||
|
assert status == 207
|
||||||
|
assert ">text/vcard;charset=utf-8<" in answer
|
||||||
|
|
||||||
def test_authorization(self):
|
def test_authorization(self):
|
||||||
authorization = "Basic " + base64.b64encode(b"user:").decode()
|
authorization = "Basic " + base64.b64encode(b"user:").decode()
|
||||||
status, _, answer = self.request(
|
status, _, answer = self.request(
|
||||||
|
@ -602,6 +602,18 @@ def simplify_prefilters(filters):
|
|||||||
return None, TIMESTAMP_MIN, TIMESTAMP_MAX, simple
|
return None, TIMESTAMP_MIN, TIMESTAMP_MAX, simple
|
||||||
|
|
||||||
|
|
||||||
|
def get_content_type(item):
|
||||||
|
"""Get the content-type of an item with charset and component parameters.
|
||||||
|
"""
|
||||||
|
mimetype = OBJECT_MIMETYPES[item.name]
|
||||||
|
encoding = item.collection.configuration.get("encoding", "request")
|
||||||
|
tag = find_tag(item)
|
||||||
|
content_type = "%s;charset=%s" % (mimetype, encoding)
|
||||||
|
if tag:
|
||||||
|
content_type += ";component=%s" % tag
|
||||||
|
return content_type
|
||||||
|
|
||||||
|
|
||||||
def find_tag(vobject_item):
|
def find_tag(vobject_item):
|
||||||
"""Find tag from ``vobject_item``."""
|
"""Find tag from ``vobject_item``."""
|
||||||
if vobject_item.name == "VCALENDAR":
|
if vobject_item.name == "VCALENDAR":
|
||||||
@ -967,9 +979,7 @@ def _propfind_response(base_prefix, path, item, props, user, write=False,
|
|||||||
is404 = True
|
is404 = True
|
||||||
# Not for collections
|
# Not for collections
|
||||||
elif tag == _tag("D", "getcontenttype"):
|
elif tag == _tag("D", "getcontenttype"):
|
||||||
name = item.name.lower()
|
element.text = get_content_type(item)
|
||||||
mimetype = "text/vcard" if name == "vcard" else "text/calendar"
|
|
||||||
element.text = "%s; component=%s" % (mimetype, name)
|
|
||||||
elif tag == _tag("D", "resourcetype"):
|
elif tag == _tag("D", "resourcetype"):
|
||||||
# resourcetype must be returned empty for non-collection elements
|
# resourcetype must be returned empty for non-collection elements
|
||||||
pass
|
pass
|
||||||
@ -1182,10 +1192,7 @@ def report(base_prefix, path, xml_request, collection):
|
|||||||
element.text = item.etag
|
element.text = item.etag
|
||||||
found_props.append(element)
|
found_props.append(element)
|
||||||
elif tag == _tag("D", "getcontenttype"):
|
elif tag == _tag("D", "getcontenttype"):
|
||||||
name = item.name.lower()
|
element.text = get_content_type(item)
|
||||||
mimetype = (
|
|
||||||
"text/vcard" if name == "vcard" else "text/calendar")
|
|
||||||
element.text = "%s; component=%s" % (mimetype, name)
|
|
||||||
found_props.append(element)
|
found_props.append(element)
|
||||||
elif tag in (
|
elif tag in (
|
||||||
_tag("C", "calendar-data"),
|
_tag("C", "calendar-data"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user