diff --git a/addons/base_import/tests/test_cases.py b/addons/base_import/tests/test_cases.py index bad79bc7cdc..768754df07c 100644 --- a/addons/base_import/tests/test_cases.py +++ b/addons/base_import/tests/test_cases.py @@ -210,9 +210,6 @@ class test_preview(TransactionCase): }) self.assertTrue('error' in result) - def test_csv_errors(self): - Import, id = self.make_import() - result = Import.parse_preview(self.cr, self.uid, id, { 'quoting': '"', 'separator': 'bob', @@ -356,3 +353,32 @@ class test_convert_import_data(TransactionCase): Import._convert_import_data, record, [False, False, False], {'quoting': '"', 'separator': ',', 'headers': True,}) + +class test_failures(TransactionCase): + def test_big_attachments(self): + """ + Ensure big fields (e.g. b64-encoded image data) can be imported and + we're not hitting limits of the default CSV parser config + """ + import csv, cStringIO + from PIL import Image + + im = Image.new('RGB', (1920, 1080)) + fout = cStringIO.StringIO() + + writer = csv.writer(fout, dialect=None) + writer.writerows([ + ['name', 'db_datas'], + ['foo', im.tobytes().encode('base64')] + ]) + + Import = self.env['base_import.import'] + imp = Import.create({ + 'res_model': 'ir.attachment', + 'file': fout.getvalue() + }) + [results] = imp.do( + ['name', 'db_datas'], + {'headers': True, 'separator': ',', 'quoting': '"'}) + self.assertFalse( + results, "results should be empty on successful import") diff --git a/openerp/cli/server.py b/openerp/cli/server.py index db0ab0699a1..f3932b4bf60 100644 --- a/openerp/cli/server.py +++ b/openerp/cli/server.py @@ -30,6 +30,7 @@ GNU Public Licence. """ import atexit +import csv import logging import os import signal @@ -142,6 +143,11 @@ def main(args): config = openerp.tools.config + # the default limit for CSV fields in the module is 128KiB, which is not + # quite sufficient to import images to store in attachment. 500MiB is a + # bit overkill, but better safe than sorry I guess + csv.field_size_limit(500 * 1024 * 1024) + if config["test_file"]: config["test_enable"] = True