summaryrefslogtreecommitdiff
path: root/openid/kvform.py
diff options
context:
space:
mode:
authorVlastimil Zíma <vlastimil.zima@nic.cz>2018-05-02 15:26:20 +0200
committerVlastimil Zíma <vlastimil.zima@nic.cz>2018-05-11 10:05:43 +0200
commit85574cd2161cf74782f51b04e988d83200bb2bf4 (patch)
treed0d9a14ed240424dd4add1af44708835e7e885a7 /openid/kvform.py
parent455b4239eeeac12d209d723c66d27df12447a946 (diff)
downloadopenid-85574cd2161cf74782f51b04e988d83200bb2bf4.tar.gz
Transform key-value form API to text strings
Diffstat (limited to 'openid/kvform.py')
-rw-r--r--openid/kvform.py46
1 files changed, 29 insertions, 17 deletions
diff --git a/openid/kvform.py b/openid/kvform.py
index e0e91a0..ca196c5 100644
--- a/openid/kvform.py
+++ b/openid/kvform.py
@@ -1,7 +1,14 @@
-__all__ = ['seqToKV', 'kvToSeq', 'dictToKV', 'kvToDict']
+"""Utilities for key-value format conversions."""
+from __future__ import unicode_literals
import logging
-import types
+
+import six
+
+from .oidutil import string_to_text
+
+__all__ = ['seqToKV', 'kvToSeq', 'dictToKV', 'kvToDict']
+
_LOGGER = logging.getLogger(__name__)
@@ -15,10 +22,10 @@ def seqToKV(seq, strict=False):
key:value pairs. The pairs are generated in the order given.
@param seq: The pairs
- @type seq: [(str, (unicode|str))]
+ @type seq: List[Tuple[six.text_type, six.text_type]], binary_type values are deprecated.
@return: A string representation of the sequence
- @rtype: str
+ @rtype: six.text_type
"""
def err(msg):
formatted = 'seqToKV warning: %s: %r' % (msg, seq)
@@ -29,11 +36,15 @@ def seqToKV(seq, strict=False):
lines = []
for k, v in seq:
- if isinstance(k, types.StringType):
- k = k.decode('UTF8')
- elif not isinstance(k, types.UnicodeType):
- err('Converting key to string: %r' % k)
- k = str(k)
+ if not isinstance(k, (six.text_type, six.binary_type)):
+ err('Converting key to text: %r' % k)
+ k = six.text_type(k)
+ if not isinstance(v, (six.text_type, six.binary_type)):
+ err('Converting value to text: %r' % v)
+ v = six.text_type(v)
+
+ k = string_to_text(k, "Binary values for keys are deprecated. Use text input instead.")
+ v = string_to_text(v, "Binary values for values are deprecated. Use text input instead.")
if '\n' in k:
raise KVFormError(
@@ -46,12 +57,6 @@ def seqToKV(seq, strict=False):
if k.strip() != k:
err('Key has whitespace at beginning or end: %r' % (k,))
- if isinstance(v, types.StringType):
- v = v.decode('UTF8')
- elif not isinstance(v, types.UnicodeType):
- err('Converting value to string: %r' % (v,))
- v = str(v)
-
if '\n' in v:
raise KVFormError(
'Invalid input for seqToKV: value contains newline: %r' % (v,))
@@ -61,16 +66,21 @@ def seqToKV(seq, strict=False):
lines.append(k + ':' + v + '\n')
- return ''.join(lines).encode('UTF8')
+ return ''.join(lines)
def kvToSeq(data, strict=False):
"""
+ Parse newline-terminated key:value pair string into a sequence.
After one parse, seqToKV and kvToSeq are inverses, with no warnings::
seq = kvToSeq(s)
seqToKV(kvToSeq(seq)) == seq
+
+ @type data: six.text_type, six.binary_type is deprecated
+
+ @rtype: List[Tuple[six.text_type, six.text_type]]
"""
def err(msg):
formatted = 'kvToSeq warning: %s: %r' % (msg, data)
@@ -79,6 +89,8 @@ def kvToSeq(data, strict=False):
else:
_LOGGER.warn(formatted)
+ data = string_to_text(data, "Binary values for data are deprecated. Use text input instead.")
+
lines = data.split('\n')
if lines[-1]:
err('Does not end in a newline')
@@ -112,7 +124,7 @@ def kvToSeq(data, strict=False):
'whitespace in value %r')
err(fmt % (line_num, v))
- pairs.append((k_s.decode('UTF8'), v_s.decode('UTF8')))
+ pairs.append((k_s, v_s))
else:
err('Line %d does not contain a colon' % line_num)