Update util.py - fix ensure_tuple instance check

doing isinstance(obj, Sequence) makes calls with keys of dict impossible
Example:
Returns 
```
d = {'a':'a', 'b':'b'}
table.upsert(values, d.keys())
```
`dict_keys(['a', 'b'])` is not of instance Sequence, but Iterable, therefore `ensure_tuple(dict_keys(['a', 'b']))` returns (dict_keys(['a', 'b']),)
which leads to invalid iteration.
This commit is contained in:
mwmajewsk 2018-06-20 22:44:49 +02:00 committed by GitHub
parent 38a59b921e
commit bcd20c7eca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,6 @@
import six import six
from hashlib import sha1 from hashlib import sha1
from collections import OrderedDict, Sequence from collections import OrderedDict, Iterable
from six.moves.urllib.parse import urlparse from six.moves.urllib.parse import urlparse
QUERY_STEP = 1000 QUERY_STEP = 1000
@ -99,7 +99,7 @@ def ensure_tuple(obj):
"""Try and make the given argument into a tuple.""" """Try and make the given argument into a tuple."""
if obj is None: if obj is None:
return tuple() return tuple()
if isinstance(obj, Sequence) and not isinstance(obj, six.string_types): if isinstance(obj, Iterable) and not isinstance(obj, six.string_types):
return tuple(obj) return tuple(obj)
return obj, return obj,