[MRG] account_statement_base_import: fix CSV parsing issues

This commit is contained in:
Alexandre Fayolle @ camptocamp
2012-11-26 11:23:58 +01:00
2 changed files with 13 additions and 14 deletions

View File

@@ -19,8 +19,6 @@
##############################################################################
from openerp.tools.translate import _
import base64
import csv
import tempfile
import datetime
from parser import BankStatementImportParser
@@ -111,20 +109,16 @@ class FileParser(BankStatementImportParser):
return True
def _parse_csv(self, delimiter=';'):
def _parse_csv(self):
"""
:return: dict of dict from csv file (line/rows)
:return: list of dict from csv file (line/rows)
"""
csv_file = tempfile.NamedTemporaryFile()
csv_file.write(self.filebuffer)
# We ensure that cursor is at beginig of file
csv_file.seek(0)
reader = UnicodeDictReader(
open(csv_file.name).readlines(),
delimiter=delimiter,
fieldnames=self.fieldnames
)
return [x for x in reader]
csv_file.flush()
with open(csv_file.name, 'rU') as fobj:
reader = UnicodeDictReader(fobj, fieldnames=self.fieldnames)
return list(reader)
def _parse_xls(self):
"""

View File

@@ -22,7 +22,12 @@ import base64
import csv
def UnicodeDictReader(utf8_data, **kwargs):
csv_reader = csv.DictReader(utf8_data, **kwargs)
sniffer = csv.Sniffer()
pos = utf8_data.tell()
sample_data = utf8_data.read(1024)
utf8_data.seek(pos)
dialect = sniffer.sniff(sample_data, delimiters=',;\t')
csv_reader = csv.DictReader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader:
yield dict([(key, unicode(value, 'utf-8')) for key, value in row.iteritems()])
@@ -210,4 +215,4 @@ def new_bank_statement_parser(parser_name, *args, **kwargs):
if cls.parser_for(parser_name):
return cls(parser_name, *args, **kwargs)
raise ValueError