diff options
author | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-05-02 15:26:20 +0200 |
---|---|---|
committer | Vlastimil Zíma <vlastimil.zima@nic.cz> | 2018-05-11 10:05:43 +0200 |
commit | 85574cd2161cf74782f51b04e988d83200bb2bf4 (patch) | |
tree | d0d9a14ed240424dd4add1af44708835e7e885a7 /openid/kvform.py | |
parent | 455b4239eeeac12d209d723c66d27df12447a946 (diff) | |
download | openid-85574cd2161cf74782f51b04e988d83200bb2bf4.tar.gz |
Transform key-value form API to text strings
Diffstat (limited to 'openid/kvform.py')
-rw-r--r-- | openid/kvform.py | 46 |
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) |