55import itertools
66
77if sys .version_info > (3 ,0 ):
8+ import codecs
9+
810 dku_basestring_type = str
911 dku_zip_longest = itertools .zip_longest
1012else :
@@ -31,7 +33,7 @@ def next(self):
3133
3234 def __iter__ (self ):
3335 return self
34-
36+
3537def none_if_throws (f ):
3638 def aux (* args , ** kargs ):
3739 try :
@@ -51,7 +53,10 @@ def __init__(self, schema, csv_stream):
5153
5254 def iter_rows (self ):
5355 def decode (x ):
54- return unicode (x , "utf8" )
56+ if sys .version_info > (3 ,0 ):
57+ return x
58+ else :
59+ return unicode (x , "utf8" )
5560
5661 def parse_iso_date (s ):
5762 if s == "" :
@@ -79,9 +84,13 @@ def str_to_bool(s):
7984 CASTERS .get (col ["type" ], decode ) for col in schema
8085 ]
8186 with closing (self .csv_stream ) as r :
82- for uncasted_tuple in csv .reader (r .raw ,
83- delimiter = '\t ' ,
84- quotechar = '"' ,
85- doublequote = True ):
87+ if sys .version_info > (3 ,0 ):
88+ raw_generator = codecs .iterdecode (r .raw , 'utf-8' )
89+ else :
90+ raw_generator = r .raw
91+ for uncasted_tuple in csv .reader (raw_generator ,
92+ delimiter = '\t ' ,
93+ quotechar = '"' ,
94+ doublequote = True ):
8695 yield [none_if_throws (caster )(val )
87- for (caster , val ) in dku_zip_longest (casters , uncasted_tuple )]
96+ for (caster , val ) in dku_zip_longest (casters , uncasted_tuple )]
0 commit comments