Skip to content

Commit efa7037

Browse files
committed
consolidate csv options
1 parent 5bcb49f commit efa7037

File tree

5 files changed

+68
-40
lines changed

5 files changed

+68
-40
lines changed

pyexcel_cli/_shared.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import sys
2+
import csv
13
import click
24
from pyexcel.core import get_io_type
35

@@ -21,3 +23,41 @@ def get_stream(name, file_type):
2123
stream = click.get_binary_stream(name)
2224

2325
return stream
26+
27+
28+
def _make_single_character(single_char_input):
29+
if sys.version_info[0] == 2:
30+
return single_char_input.encode('ascii')
31+
else:
32+
return single_char_input[0]
33+
34+
35+
def _make_csv_params(lineterminator,
36+
encoding,
37+
delimiter,
38+
quoting,
39+
quotechar,
40+
escapechar,
41+
no_doublequote, prefix=""):
42+
params = {}
43+
if lineterminator is not None:
44+
params[prefix + 'lineterminator'] = lineterminator
45+
if encoding is not None:
46+
params[prefix + 'encoding'] = encoding
47+
if delimiter is not None:
48+
params[prefix + 'delimiter'] = _make_single_character(delimiter)
49+
if quotechar is not None:
50+
params[prefix + 'quotechar'] = _make_single_character(quotechar)
51+
if escapechar is not None:
52+
params[prefix + 'escapechar'] = _make_single_character(escapechar)
53+
if no_doublequote:
54+
params[prefix + 'no_doublequote'] = no_doublequote
55+
if quoting is None:
56+
params[prefix + 'quoting'] = csv.QUOTE_MINIMAL
57+
elif quoting == 'none':
58+
params[prefix + 'quoting'] = csv.QUOTE_NONE
59+
elif quoting == "all":
60+
params[prefix + 'quoting'] = csv.QUOTE_ALL
61+
elif quoting == "nonnumeric":
62+
params[prefix + 'quoting'] = csv.QUOTE_NONNUMERIC
63+
return params

pyexcel_cli/merge.py

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
88
"""
99
import os
10-
import csv
1110
import sys
1211
import glob
1312
import click
1413
from pyexcel.book import Book
1514
from pyexcel import get_book
15+
from pyexcel_cli._shared import (
16+
_make_csv_params
17+
)
1618

1719

1820
@click.command(short_help="Merge excel files into one")
@@ -54,26 +56,10 @@ def merge(output_file_type,
5456

5557
params = {}
5658
if output_file_type == 'csv' or output.endswith('csv'):
57-
if csv_lineterminator is not None:
58-
params['lineterminator'] = csv_lineterminator
59-
if csv_encoding is not None:
60-
params['encoding'] = csv_encoding
61-
if csv_delimiter is not None:
62-
params['delimiter'] = _make_single_character(csv_delimiter)
63-
if csv_quotechar is not None:
64-
params['quotechar'] = _make_single_character(csv_quotechar)
65-
if csv_escapechar is not None:
66-
params['escapechar'] = _make_single_character(csv_escapechar)
67-
if csv_no_doublequote:
68-
params['no_doublequote'] = csv_no_doublequote
69-
if csv_quoting is None:
70-
params['quoting'] = csv.QUOTE_MINIMAL
71-
elif csv_quoting == 'none':
72-
params['quoting'] = csv.QUOTE_NONE
73-
elif csv_quoting == "all":
74-
params['quoting'] = csv.QUOTE_ALL
75-
elif csv_quoting == "nonnumeric":
76-
params['quoting'] = csv.QUOTE_NONNUMERIC
59+
params = _make_csv_params(
60+
csv_lineterminator, csv_encoding, csv_delimiter,
61+
csv_quoting, csv_quotechar, csv_escapechar,
62+
csv_no_doublequote)
7763

7864
for afile in _join_the_list(file_list, dir_list, glob_list):
7965
try:
@@ -102,10 +88,3 @@ def _join_the_list(file_list, dir_list, glob_list):
10288
for globee in glob_list:
10389
for afile in glob.iglob(globee):
10490
yield afile
105-
106-
107-
def _make_single_character(single_char_input):
108-
if sys.version_info[0] == 2:
109-
return single_char_input.encode('ascii')
110-
else:
111-
return single_char_input[0]

pyexcel_cli/transcode.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111

1212
from pyexcel_cli._shared import (
1313
get_input_content,
14-
get_output_stream
14+
get_output_stream,
15+
_make_csv_params
1516
)
1617

1718

@@ -40,14 +41,19 @@
4041
@click.option('--csv-delimiter', default=None)
4142
@click.option('--csv-encoding', default=None)
4243
@click.option('--csv-lineterminator', default=None)
44+
@click.option('--csv-quotechar', default=None)
45+
@click.option('--csv-escapechar', default=None)
46+
@click.option('--csv-quoting', default=None)
4347
@click.option('--csv-no-doublequote', default=False, is_flag=True)
4448
@click.argument('source', nargs=1)
4549
@click.argument('output', nargs=1)
4650
def transcode(source_file_type, output_file_type,
4751
sheet_name, sheet_index,
4852
name_columns_by_row, name_rows_by_column,
4953
csv_delimiter, csv_encoding,
50-
csv_lineterminator, csv_no_doublequote,
54+
csv_lineterminator, csv_quotechar,
55+
csv_escapechar, csv_quoting,
56+
csv_no_doublequote,
5157
source, output):
5258
"""
5359
Trancode an excel file from one format to another.
@@ -71,14 +77,11 @@ def transcode(source_file_type, output_file_type,
7177
params['dest_file_name'] = output
7278

7379
if output_file_type == 'csv' or output.endswith('csv'):
74-
if csv_lineterminator is not None:
75-
params['dest_lineterminator'] = csv_lineterminator
76-
if csv_encoding is not None:
77-
params['dest_encoding'] = csv_encoding
78-
if csv_delimiter is not None:
79-
params['dest_delimiter'] = csv_delimiter
80-
if csv_no_doublequote:
81-
params['dest_no_doublequote'] = csv_no_doublequote
80+
csv_params = _make_csv_params(
81+
csv_lineterminator, csv_encoding, csv_delimiter,
82+
csv_quoting, csv_quotechar, csv_escapechar,
83+
csv_no_doublequote, prefix="dest_")
84+
params.update(csv_params)
8285

8386
sheet_parameters = [sheet_name, sheet_index,
8487
name_columns_by_row, name_rows_by_column]

pyexcel_cli/view.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,18 @@
3131
@click.option('--csv-delimiter', default=None)
3232
@click.option('--csv-encoding', default=None)
3333
@click.option('--csv-lineterminator', default=None)
34+
@click.option('--csv-quotechar', default=None)
35+
@click.option('--csv-escapechar', default=None)
36+
@click.option('--csv-quoting', default=None)
3437
@click.option('--csv-no-doublequote', default=False, is_flag=True)
3538
@click.argument('source')
3639
@click.pass_context
3740
def view(ctx, source_file_type, output_file_type,
3841
sheet_name, sheet_index,
3942
name_columns_by_row, name_rows_by_column,
4043
csv_delimiter, csv_encoding,
41-
csv_lineterminator, csv_no_doublequote,
44+
csv_lineterminator, csv_quotechar,
45+
csv_escapechar, csv_quoting, csv_no_doublequote,
4246
source):
4347
"""
4448
Simply show the data inside the file
@@ -57,5 +61,8 @@ def view(ctx, source_file_type, output_file_type,
5761
csv_delimiter=csv_delimiter,
5862
csv_encoding=csv_encoding,
5963
csv_lineterminator=csv_lineterminator,
64+
csv_quotechar=csv_quotechar,
65+
csv_escapechar=csv_escapechar,
66+
csv_quoting=csv_quoting,
6067
csv_no_doublequote=csv_no_doublequote,
6168
output='-')

tests/test_merge.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ def test_stdout_option():
4444
"--csv-delimiter", ":",
4545
file_fixture, dir_fixture, glob_fixture,
4646
output])
47-
print(result.exc_info)
4847
eq_(result.exit_code, 0)
4948
expected = dedent("""
5049
---pyexcel:transcode_simple.csv---

0 commit comments

Comments
 (0)