summaryrefslogtreecommitdiff
path: root/openid/yadis
diff options
context:
space:
mode:
authorVlastimil Zíma <vlastimil.zima@nic.cz>2018-05-09 09:45:55 +0200
committerVlastimil Zíma <vlastimil.zima@nic.cz>2018-05-11 13:40:03 +0200
commit8305d62a5d46e1df688aba742f0cfea0dfc4f778 (patch)
tree958b4fa39cc1783aafaf81d5d0b6c6641886a82f /openid/yadis
parentac5e7589990f44fa4e6e0da93748c9b4407e1cf3 (diff)
downloadopenid-8305d62a5d46e1df688aba742f0cfea0dfc4f778.tar.gz
Fix URI quoting for python 3
Diffstat (limited to 'openid/yadis')
-rw-r--r--openid/yadis/xri.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/openid/yadis/xri.py b/openid/yadis/xri.py
index 5856792..2924f35 100644
--- a/openid/yadis/xri.py
+++ b/openid/yadis/xri.py
@@ -7,11 +7,10 @@
from __future__ import unicode_literals
import re
-import warnings
-import six
from six.moves.urllib.parse import quote
+from openid.oidutil import string_to_text
from openid.urinorm import GEN_DELIMS, PERCENT_ENCODING_CHARACTER, SUB_DELIMS
XRI_AUTHORITIES = ['!', '=', '@', '+', '$', '(']
@@ -68,14 +67,16 @@ def iriToURI(iri):
@type iri: six.text_type, six.binary_type deprecated.
@rtype: six.text_type
"""
- # Transform the input to the binary string. `quote` doesn't quote correctly unicode strings.
- if isinstance(iri, six.text_type):
- iri = iri.encode('utf-8')
- else:
- assert isinstance(iri, six.binary_type)
- warnings.warn("Binary input for iriToURI is deprecated. Use text input instead.", DeprecationWarning)
+ iri = string_to_text(iri, "Binary input for iriToURI is deprecated. Use text input instead.")
- return quote(iri, (GEN_DELIMS + SUB_DELIMS + PERCENT_ENCODING_CHARACTER).encode('utf-8')).decode('utf-8')
+ # This is hackish. `quote` requires `str` in both py27 and py3+.
+ if isinstance(iri, str):
+ # Python 3 branch
+ return quote(iri, GEN_DELIMS + SUB_DELIMS + PERCENT_ENCODING_CHARACTER)
+ else:
+ # Python 2 branch
+ return quote(iri.encode('utf-8'),
+ (GEN_DELIMS + SUB_DELIMS + PERCENT_ENCODING_CHARACTER).encode('utf-8')).decode('utf-8')
def providerIsAuthoritative(providerID, canonicalID):