summaryrefslogtreecommitdiff
path: root/addons/base_import
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2015-04-01 12:59:20 +0200
committerChristophe Simonis <chs@odoo.com>2015-04-01 13:22:11 +0200
commitf18b46fcded8a7bacda291436f1b60774cb4ba0c (patch)
tree968877b695bd06804410ba0718324a4e975ee40f /addons/base_import
parentfe31451899ea84fbffe1bc17d7f41ec10a8d786a (diff)
[FIX] base_import: ignore stripped empty lines
Better fix for commit dab37df04d7f2ef1dc8ab6be491693294dea949b
Diffstat (limited to 'addons/base_import')
-rw-r--r--addons/base_import/models.py18
-rw-r--r--addons/base_import/tests/test_cases.py22
2 files changed, 33 insertions, 7 deletions
diff --git a/addons/base_import/models.py b/addons/base_import/models.py
index 80ee8fef595..9778391521a 100644
--- a/addons/base_import/models.py
+++ b/addons/base_import/models.py
@@ -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):
diff --git a/addons/base_import/tests/test_cases.py b/addons/base_import/tests/test_cases.py
index 768754df07c..873d749d55a 100644
--- a/addons/base_import/tests/test_cases.py
+++ b/addons/base_import/tests/test_cases.py
@@ -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')