mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
[MRG] account_statement_base_import: fix CSV parsing issues
This commit is contained in:
@@ -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):
|
||||
"""
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user