@@ -68,6 +68,7 @@ def print_table(self, max_rows=20, max_columns=6, output=sys.stdout, max_column_
68
68
widths = [len (n ) for n in column_names ]
69
69
number_formatters = []
70
70
formatted_data = []
71
+ multi_line_rows = False
71
72
72
73
# Determine correct number of decimal places for each Number column
73
74
for i , c in enumerate (self ._columns ):
@@ -89,7 +90,7 @@ def print_table(self, max_rows=20, max_columns=6, output=sys.stdout, max_column_
89
90
if i >= max_rows :
90
91
break
91
92
92
- formatted_row = []
93
+ formatted_row = [[] ]
93
94
94
95
for j , v in enumerate (row ):
95
96
if j >= max_columns :
@@ -104,14 +105,33 @@ def print_table(self, max_rows=20, max_columns=6, output=sys.stdout, max_column_
104
105
)
105
106
else :
106
107
v = six .text_type (v )
108
+ vs = v .splitlines ()
109
+ if len (vs ) > 1 :
110
+ multi_line_rows = True
111
+
112
+ v = vs [0 ]
113
+ for k , xv in enumerate (vs ):
114
+ if k == 0 :
115
+ v = xv
116
+ continue
117
+
118
+ if max_column_width is not None and len (xv ) > max_column_width :
119
+ xv = '%s...' % xv [:max_column_width - 3 ]
120
+
121
+ if len (xv ) > widths [j ]:
122
+ widths [j ] = len (xv )
123
+
124
+ if k == len (formatted_row ):
125
+ formatted_row .append (['' ] * max_columns )
126
+ formatted_row [k ][j ] = xv
107
127
108
128
if max_column_width is not None and len (v ) > max_column_width :
109
129
v = '%s...' % v [:max_column_width - 3 ]
110
130
111
131
if len (v ) > widths [j ]:
112
132
widths [j ] = len (v )
113
133
114
- formatted_row .append (v )
134
+ formatted_row [ 0 ] .append (v )
115
135
116
136
if j >= max_columns :
117
137
break
@@ -140,7 +160,6 @@ def write_row(formatted_row):
140
160
141
161
write ('%s%s%s' % (v_line , text , v_line ))
142
162
143
- # Dashes span each width with '+' character at intersection of
144
163
# horizontal and vertical dividers.
145
164
divider = '%(v_line)s %(columns)s %(v_line)s' % {
146
165
'h_line' : h_line ,
@@ -154,7 +173,10 @@ def write_row(formatted_row):
154
173
155
174
# Rows
156
175
for formatted_row in formatted_data :
157
- write_row (formatted_row )
176
+ for row_line in formatted_row :
177
+ write_row (row_line )
178
+ if multi_line_rows :
179
+ write (divider )
158
180
159
181
# Row indicating data was truncated
160
182
if rows_truncated :
0 commit comments