Possible fix for #49

- Radicale incorrectly unquotes URLs
  - Older versions of radicale are so buggy they fail to look up items
    with url quotes in them.
  - ownCloud/SabreDAV follows the rebustness principle such that it
    takes anything, but returns properly encoded URLs.

Conclusion: Send broken, unquoted URLs, because both sides seem to be
happy with them. As wrong as it might seem, it works.
This commit is contained in:
Markus Unterwaditzer 2014-05-12 18:54:04 +02:00
parent 89063c5096
commit b5df8a4514
2 changed files with 7 additions and 1 deletions

View file

@ -117,9 +117,10 @@ class DavStorage(Storage):
schema.'''
x = utils.urlparse.urljoin(self.url, href)
assert x.startswith(self.url)
return utils.urlparse.urlsplit(x).path
return utils.urlunquote_plus(utils.urlparse.urlsplit(x).path)
def _get_href(self, uid):
uid = utils.urlunquote_plus(uid)
return self._normalize_href(super(DavStorage, self)._get_href(uid))
def _request(self, method, path, data=None, headers=None):

View file

@ -22,11 +22,16 @@ PY2 = sys.version_info[0] == 2
if PY2:
import urlparse
from urllib import \
quote_plus as urlquote_plus, \
unquote_plus as urlunquote_plus
text_type = unicode # flake8: noqa
iteritems = lambda x: x.iteritems()
itervalues = lambda x: x.itervalues()
else:
import urllib.parse as urlparse
urlquote_plus = urlparse.quote_plus
urlunquote_plus = urlparse.unquote_plus
text_type = str
iteritems = lambda x: x.items()
itervalues = lambda x: x.values()