[FIX] base_import: ignore stripped empty lines

Better fix for commit dab37df04d
This commit is contained in:
Christophe Simonis 2015-04-01 12:59:20 +02:00
parent fe31451899
commit f18b46fcde
2 changed files with 33 additions and 7 deletions

View File

@ -136,7 +136,11 @@ class ir_import(orm.TransientModel):
StringIO(record.file),
quotechar=str(options['quoting']),
delimiter=str(options['separator']))
csv_nonempty = itertools.ifilter(None, csv_iterator)
def nonempty(row):
return any(x for x in row if x.strip())
csv_nonempty = itertools.ifilter(nonempty, csv_iterator)
# TODO: guess encoding with chardet? Or https://github.com/aadsm/jschardet
encoding = options.get('encoding', 'utf-8')
return itertools.imap(
@ -280,13 +284,13 @@ class ir_import(orm.TransientModel):
if options.get('headers'):
rows_to_import = itertools.islice(
rows_to_import, 1, None)
data = []
for row in rows_to_import:
data = [
row for row in itertools.imap(mapper, rows_to_import)
# don't try inserting completely empty rows (e.g. from
# filtering out o2m fields
if any(f.strip() for f in row):
data.append(mapper(row))
# filtering out o2m fields)
if any(row)
]
return data, import_fields
def do(self, cr, uid, id, fields, options, dryrun=False, context=None):

View File

@ -322,6 +322,28 @@ class test_convert_import_data(TransactionCase):
('', '6'),
])
def test_empty_rows(self):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': 'name,Some Value\n'
'foo,1\n'
'\n'
'bar,2\n'
' \n'
'\t \n'
})
record = Import.browse(self.cr, self.uid, id)
data, fields = Import._convert_import_data(
record, ['name', 'somevalue'],
{'quoting': '"', 'separator': ',', 'headers': True,})
self.assertItemsEqual(fields, ['name', 'somevalue'])
self.assertItemsEqual(data, [
('foo', '1'),
('bar', '2'),
])
def test_nofield(self):
Import = self.registry('base_import.import')