3636 gzip = None
3737 GZIP_BASE = object
3838
39- __version__ = '1.0.4 '
39+ __version__ = '1.0.5a '
4040
4141
4242class FakeShutdownEvent (object ):
@@ -131,21 +131,25 @@ def isSet():
131131 PARSER_TYPE_STR = 'string'
132132
133133try :
134- from io import StringIO , BytesIO , TextIOWrapper , FileIO
134+ from cStringIO import StringIO
135+ BytesIO = None
135136except ImportError :
136137 try :
137- from cStringIO import StringIO
138- BytesIO = None
139- except ImportError :
140138 from StringIO import StringIO
141139 BytesIO = None
140+ except ImportError :
141+ from io import StringIO , BytesIO
142142
143143try :
144144 import __builtin__
145145except ImportError :
146146 import builtins
147+ from io import TextIOWrapper , FileIO
147148
148149 class _Py3Utf8Stdout (TextIOWrapper ):
150+ """UTF-8 encoded wrapper around stdout for py3, to override
151+ ASCII stdout
152+ """
149153 def __init__ (self , ** kwargs ):
150154 buf = FileIO (sys .stdout .fileno (), 'w' )
151155 super (_Py3Utf8Stdout , self ).__init__ (
@@ -161,12 +165,24 @@ def write(self, s):
161165 _py3_print = getattr (builtins , 'print' )
162166 _py3_utf8_stdout = _Py3Utf8Stdout ()
163167
168+ def to_utf8 (v ):
169+ """No-op encode to utf-8 for py3"""
170+ return v
171+
164172 def print_ (* args , ** kwargs ):
173+ """Wrapper function for py3 to print, with a utf-8 encoded stdout"""
165174 kwargs ['file' ] = _py3_utf8_stdout
166175 _py3_print (* args , ** kwargs )
167176else :
168177 del __builtin__
169178
179+ def to_utf8 (v ):
180+ """Encode value to utf-8 if possible for py2"""
181+ try :
182+ return v .encode ('utf8' , 'strict' )
183+ except AttributeError :
184+ return v
185+
170186 def print_ (* args , ** kwargs ):
171187 """The new-style print function for Python 2.4 and 2.5.
172188
@@ -700,10 +716,11 @@ def csv(self, delimiter=','):
700716 data = self .dict ()
701717 out = StringIO ()
702718 writer = csv .writer (out , delimiter = delimiter , lineterminator = '' )
703- writer .writerow ([data ['server' ]['id' ], data ['server' ]['sponsor' ],
704- data ['server' ]['name' ], data ['timestamp' ],
705- data ['server' ]['d' ], data ['ping' ], data ['download' ],
706- data ['upload' ]])
719+ row = [data ['server' ]['id' ], data ['server' ]['sponsor' ],
720+ data ['server' ]['name' ], data ['timestamp' ],
721+ data ['server' ]['d' ], data ['ping' ], data ['download' ],
722+ data ['upload' ]]
723+ writer .writerow ([to_utf8 (v ) for v in row ])
707724 return out .getvalue ()
708725
709726 def json (self , pretty = False ):
@@ -1473,5 +1490,3 @@ def main():
14731490
14741491if __name__ == '__main__' :
14751492 main ()
1476-
1477- # vim:ts=4:sw=4:expandtab
0 commit comments