@@ -28,6 +28,23 @@ def _utf8(s):
2828 return s
2929
3030
31+ def _utf8_params (params ):
32+ """encode a dictionary of URL parameters (including iterables) as utf-8"""
33+ assert isinstance (params , dict )
34+ encoded_params = []
35+ for k , v in params .items ():
36+ if v is None :
37+ continue
38+ if isinstance (v , (int , long , float )):
39+ v = str (v )
40+ if isinstance (v , (list , tuple )):
41+ v = [_utf8 (x ) for x in v ]
42+ else :
43+ v = _utf8 (v )
44+ encoded_params .append ((k , v ))
45+ return dict (encoded_params )
46+
47+
3148class Connection (object ):
3249 """
3350 This is a python library for accessing the bitly api
@@ -745,14 +762,7 @@ def _call(self, host, method, params, secret=None, timeout=5000):
745762 params ['signature' ] = self ._generateSignature (params , secret )
746763
747764 # force to utf8 to fix ascii codec errors
748- encoded_params = []
749- for k , v in params .items ():
750- if isinstance (v , (list , tuple )):
751- v = [_utf8 (e ) for e in v ]
752- else :
753- v = _utf8 (v )
754- encoded_params .append ((k , v ))
755- params = dict (encoded_params )
765+ params = _utf8_params (params )
756766
757767 request = "%(scheme)s://%(host)s/%(method)s?%(params)s" % {
758768 'scheme' : scheme ,
0 commit comments