Hi, I've been a happy user of beancount+fava for years. Although I'm not a developer, I managed to create and maintain an importer, but never took the time to learn how to create unit tests.
This September, my importer stopped working even though I didn't touch it. The input file is now listed as "Non-importable Files" by Fava, like previously imported Excel files. I guess the problem comes from a software upgrade (I'm now running fava 1.20.1-2 and beancount 2.3.4-2) and I'm wondering if the pull request #659 broke my importer somehow: [parser: Stop pretending we support encodings other than UTF-8](https://github.com/beancount/beancount/pull/659) Here's the input file ACCOUNT_ID.xls generated by Boursorama (Unicode text, UTF-8 text) ``` "*** Période : 01/10/2021 - 02/10/2021" "*** Compte : ACCOUNT_ID -EUR " "DATE OPERATION" "DATE VALEUR" "LIBELLE" "MONTANT" "DEVISE" " 17/09/2021" " 17/09/2021" "CARTE 11/09/21 PAYEE'S NAME CB*DIGITS" -00000000002,00 "EUR " ``` And the importer.py: ``` import os import re import codecs import csv import datetime from beancount.core import number, data, amount from beancount.ingest import importer from smart_importer.detector import DuplicateDetector class Target(object): def __init__(self, account, payee=None, narration=None): self.account = account self.payee = payee self.narration = narration class Importer(importer.ImporterProtocol): def __init__(self, account): self.account = account def identify(self, fname): return re.match(r"ACCOUNT_ID", os.path.basename(fname.name)) def file_account(self, fname): return self.account def file_date(self, fname): fp = codecs.open(fname.name, 'r', 'us-ascii') line = fp.readlines()[0] period = line.strip('"*** Période : ') start = datetime.datetime.strptime(period[0:10], '%d/%m/%Y').date() return start def file_name(self, fname): fp = codecs.open(fname.name, 'r', 'us-ascii') line = fp.readlines()[0] period = line.strip('"*** Période : ') start = datetime.datetime.strptime(period[0:10], '%d/%m/%Y').date() end = datetime.datetime.strptime(period[13:23], '%d/%m/%Y').date() filename = end.strftime('%Y-%m-%d') + ' ACCOUNT_ID since ' + start.strftime('%Y-%m-%d') + '.xls' return filename def extract(self, fname, existing_entries): fp = codecs.open(fname.name, 'r') lines = fp.readlines() # drop top and bottom stuff lines = lines[4:] entries = [] def fix_decimals(s): return s.replace(',', '.') for index, row in enumerate(csv.reader(lines, delimiter='\t')): meta = data.new_metadata(fname.name, index) date = datetime.datetime.strptime(row[0], ' %d/%m/%Y').date() desc = row[2].rstrip() payee = "" currency = row[4] num = number.D(fix_decimals(row[3])) units = amount.Amount(num, currency) frm = data.Posting(self.account, units, None, None, None, None) txn = data.Transaction(meta, date, "*", payee, desc, data.EMPTY_SET, data.EMPTY_SET, [frm]) entries.append(txn) return entries ``` Any idea? Thank you. -- You received this message because you are subscribed to the Google Groups "Beancount" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/3c94b19b-e1de-47b4-86a9-56edf34b4bb0%40www.fastmail.com.
