mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix printing of CSV to stdout in py3
This commit is contained in:
parent
7f7d7efe6d
commit
0563676263
@ -7,10 +7,9 @@ from __future__ import absolute_import, division, print_function, unicode_litera
|
|||||||
import csv
|
import csv
|
||||||
import sys
|
import sys
|
||||||
from textwrap import TextWrapper
|
from textwrap import TextWrapper
|
||||||
from polyglot.io import PolyglotBytesIO
|
|
||||||
|
|
||||||
from calibre import prints
|
from calibre import prints
|
||||||
from polyglot.builtins import unicode_type, map
|
from polyglot.builtins import as_bytes, map, unicode_type
|
||||||
|
|
||||||
readonly = True
|
readonly = True
|
||||||
version = 0 # change this if you change signature of implementation()
|
version = 0 # change this if you change signature of implementation()
|
||||||
@ -123,16 +122,22 @@ def do_list(fields, data, opts):
|
|||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
class StdoutWriter:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.do_write = getattr(sys.stdout, 'buffer', sys.stdout).write
|
||||||
|
|
||||||
|
def write(self, x):
|
||||||
|
x = as_bytes(x)
|
||||||
|
self.do_write(x)
|
||||||
|
|
||||||
|
|
||||||
def do_csv(fields, data, opts):
|
def do_csv(fields, data, opts):
|
||||||
buf = PolyglotBytesIO()
|
csv_print = csv.writer(StdoutWriter(), opts.dialect)
|
||||||
csv_print = csv.writer(buf, opts.dialect)
|
|
||||||
csv_print.writerow(fields)
|
csv_print.writerow(fields)
|
||||||
for d in data:
|
for d in data:
|
||||||
row = [d[f] for f in fields]
|
row = [d[f] for f in fields]
|
||||||
csv_print.writerow([
|
csv_print.writerow(row)
|
||||||
x if isinstance(x, bytes) else unicode_type(x).encode('utf-8') for x in row
|
|
||||||
])
|
|
||||||
print(buf.getvalue())
|
|
||||||
|
|
||||||
|
|
||||||
def main(opts, args, dbctx):
|
def main(opts, args, dbctx):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user