Merge branch 'Elarnon/unicodecsv' into 'master'

Utilise unicodecsv de PyPy

GestioCOF utilisait une implémentation locale du module `csv` compatible
avec `unicode`. Il existe un module PyPy du même nom qui fait la même
chose, autant l'utiliser (par ailleurs, il fonctionne plus sainement
avec Python 3).

See merge request !18
This commit is contained in:
Martin Pepin 2016-06-04 13:53:28 +02:00
commit 5088f7b876
2 changed files with 1 additions and 60 deletions

View file

@ -1,60 +0,0 @@
import csv, codecs, cStringIO
class UTF8Recoder(object):
"""
Iterator that reads an encoded stream and reencodes the input to UTF-8
"""
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8")
class UnicodeReader(object):
"""
A CSV reader which will iterate over lines in the CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
f = UTF8Recoder(f, encoding)
self.reader = csv.reader(f, dialect=dialect, **kwds)
def next(self):
row = self.reader.next()
return [unicode(s, "utf-8") for s in row]
def __iter__(self):
return self
class UnicodeWriter(object):
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)

View file

@ -9,3 +9,4 @@ MySQL-python==1.2.5
Pillow==2.9.0 Pillow==2.9.0
simplejson==3.8.2 simplejson==3.8.2
six==1.10.0 six==1.10.0
unicodecsv==0.14.1