Changeset - b33c83af0a0f
[Not reviewed]
0 2 0
Brett Smith - 6 years ago 2018-06-20 19:59:56
brettcsmith@brettcsmith.org
importers: Catch and handle CSV parse errors in can_import.

import2ledger bailed on one of these exceptions when trying to import
a recent XLS file that had a null byte on a line.
2 files changed with 7 insertions and 3 deletions:
0 comments (0 inline, 0 general)
import2ledger/importers/_csv.py
Show inline comments
...
 
@@ -54,26 +54,30 @@ class CSVImporterBase:
 
        header = {}
 
        row = None
 
        for row in cls.Reader(input_file):
 
            row_data = cls._read_header_row(row)
 
            if row_data is None:
 
                break
 
            else:
 
                header.update(row_data)
 
        return header, row
 

	
 
    @classmethod
 
    def can_import(cls, input_file):
 
        _, fields = cls._read_header(input_file)
 
        return cls._NEEDED_KEYS.issubset(fields or ())
 
        try:
 
            _, fields = cls._read_header(input_file)
 
        except csv.Error:
 
            return False
 
        else:
 
            return cls._NEEDED_KEYS.issubset(fields or ())
 

	
 
    def __init__(self, input_file):
 
        self.entry_seed, fields = self._read_header(input_file)
 
        self.in_csv = self.DictReader(input_file, fields)
 

	
 
    def __iter__(self):
 
        for row in self.in_csv:
 
            row_data = self._read_row(row)
 
            if row_data is not None:
 
                copied_fields = {
 
                    entry_key: row[row_key]
 
                    for row_key, entry_key in self.COPIED_FIELDS.items()
setup.py
Show inline comments
...
 
@@ -21,24 +21,24 @@ all_extras_require = [
 
]
 

	
 
REQUIREMENTS['extras_require']['all_importers'] = all_extras_require
 
REQUIREMENTS['tests_require'] = [
 
    'pytest',
 
    'PyYAML',
 
    *all_extras_require,
 
]
 

	
 
setup(
 
    name='import2ledger',
 
    description="Import different sources of financial data to Ledger",
 
    version='0.3',
 
    version='0.4',
 
    author='Brett Smith',
 
    author_email='brettcsmith@brettcsmith.org',
 
    license='GNU AGPLv3+',
 

	
 
    packages=find_packages(include=['import2ledger', 'import2ledger.*']),
 
    entry_points={
 
        'console_scripts': ['import2ledger = import2ledger.__main__:main'],
 
    },
 

	
 
    **REQUIREMENTS,
 
)
0 comments (0 inline, 0 general)