fallback to repr when can't convert to native string

This commit is contained in:
Elias Dorneles 2016-01-25 22:24:35 -02:00
parent 23b3336c1f
commit 2dfdde3c79
2 changed files with 16 additions and 2 deletions

View File

@ -192,9 +192,16 @@ class CsvItemExporter(BaseItemExporter):
fields = self._get_serialized_fields(item, default_value='',
include_empty=True)
values = [to_native_str(x) for _, x in fields]
values = list(self._build_row(x for _, x in fields))
self.csv_writer.writerow(values)
def _build_row(self, values):
for s in values:
try:
yield to_native_str(s)
except TypeError:
yield to_native_str(repr(s))
def _write_headers_and_set_fields_to_export(self, item):
if self.include_headers_line:
if not self.fields_to_export:
@ -204,7 +211,7 @@ class CsvItemExporter(BaseItemExporter):
else:
# use fields declared in Item
self.fields_to_export = list(item.fields.keys())
row = [to_native_str(s) for s in self.fields_to_export]
row = list(self._build_row(self.fields_to_export))
self.csv_writer.writerow(row)

View File

@ -237,6 +237,13 @@ class CsvItemExporterTest(BaseItemExporterTest):
expected='"Mary,Paul",John\r\n',
)
def test_join_multivalue_not_strings(self):
self.assertExportResult(
item=dict(name='John', friends=[4, 8]),
include_headers_line=False,
expected='"[4, 8]",John\r\n',
)
class XmlItemExporterTest(BaseItemExporterTest):