[IMP] un-b64 the import file field, use raw binary

bzr revid: xmo@openerp.com-20120830103215-trv5cjg9jvj8ano1
This commit is contained in:
Xavier Morel
2012-08-30 12:32:15 +02:00
parent 41240706e7
commit 7006b17af3
3 changed files with 19 additions and 24 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ class ImportController(openerpweb.Controller):
import_id = int(import_id)
written = req.session.model('base_import.import').write(import_id, {
'file': base64.b64encode(file.read()),
'file': file.read(),
'file_name': file.filename,
'file_type': file.content_type,
}, req.session.eval_context(req.context))
+5 -7
View File
@@ -1,10 +1,7 @@
import base64
import codecs
import csv
import itertools
import logging
import operator
import random
try:
from cStringIO import StringIO
@@ -24,7 +21,8 @@ class ir_import(orm.TransientModel):
_columns = {
'res_model': fields.char('Model', size=64),
'file': fields.binary('File'),
'file': fields.binary(
'File', help="File to check and/or import, raw binary (not base64)"),
'file_name': fields.char('File Name', size=None),
'file_mime': fields.char('File Type', size=None),
}
@@ -123,7 +121,7 @@ class ir_import(orm.TransientModel):
:throws UnicodeDecodeError: if ``options.encoding`` is incorrect
"""
csv_iterator = csv.reader(
StringIO(base64.b64decode(record.file)),
StringIO(record.file),
quotechar=options['quote'],
delimiter=options['separator'])
csv_nonempty = itertools.ifilter(None, csv_iterator)
@@ -238,8 +236,8 @@ class ir_import(orm.TransientModel):
# even if it yields non-printable characters. This is
# in case of UnicodeDecodeError (or csv.Error
# compounded with UnicodeDecodeError)
'preview': base64.b64decode(record.file)[:ERROR_PREVIEW_BYTES]\
.decode('iso-8859-1'),
'preview': record.file[:ERROR_PREVIEW_BYTES]
.decode( 'iso-8859-1'),
}
def _convert_import_data(self, record, fields, options, context=None):
+13 -16
View File
@@ -167,15 +167,12 @@ class test_match_headers_multiple(TransactionCase):
})
)
import base64, csv
class test_preview(TransactionCase):
def make_import(self):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'res.users',
'file': base64.b64encode(
u"로그인,언어\n".encode('euc_kr'),
"bob,1\n"),
'file': u"로그인,언어\nbob,1\n".encode('euc_kr'),
})
return Import, id
@@ -211,10 +208,10 @@ class test_preview(TransactionCase):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
'bar,3,4\n'
'qux,5,6\n')
'qux,5,6\n'
})
result = Import.parse_preview(self.cr, self.uid, id, {
@@ -248,10 +245,10 @@ class test_convert_import_data(TransactionCase):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
'bar,3,4\n'
'qux,5,6\n')
'qux,5,6\n'
})
record = Import.browse(self.cr, self.uid, id)
data, fields = Import._convert_import_data(
@@ -272,10 +269,10 @@ class test_convert_import_data(TransactionCase):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
'bar,3,4\n'
'qux,5,6\n')
'qux,5,6\n'
})
record = Import.browse(self.cr, self.uid, id)
data, fields = Import._convert_import_data(
@@ -296,10 +293,10 @@ class test_convert_import_data(TransactionCase):
Import = self.registry('base_import.import')
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
',3,\n'
',5,6\n')
',5,6\n'
})
record = Import.browse(self.cr, self.uid, id)
data, fields = Import._convert_import_data(
@@ -317,8 +314,8 @@ class test_convert_import_data(TransactionCase):
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'foo,1,2\n')
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
})
record = Import.browse(self.cr, self.uid, id)
@@ -333,8 +330,8 @@ class test_convert_import_data(TransactionCase):
id = Import.create(self.cr, self.uid, {
'res_model': 'base_import.tests.models.preview',
'file': base64.b64encode('name,Some Value,Counter\n'
'foo,1,2\n')
'file': 'name,Some Value,Counter\n'
'foo,1,2\n'
})
record = Import.browse(self.cr, self.uid, id)