ofx-processor/ofx_processor/processors/lcl.py

74 lines
2 KiB
Python
Raw Normal View History

import sys
2020-09-01 19:18:55 +02:00
from datetime import datetime
import click
2020-09-01 19:18:55 +02:00
import dateparser
from ofx_processor.utils.base_ofx import OfxBaseLine, OfxBaseProcessor
class LclLine(OfxBaseLine):
2020-09-01 19:18:55 +02:00
def _extract_payee_and_date(self):
split = self.data.name.split()
default_date = (
self.data.dtposted.isoformat().split("T")[0] if self.data.dtposted else None
)
if not split:
return "", default_date
date_spot = split[-1]
if "/" not in date_spot:
return " ".join(split), default_date
date = dateparser.parse(
split[-1], date_formats=["%d/%m/%Y"], languages=["fr"]
) # type: datetime
if date:
name = " ".join(split[:-1])
date = date.strftime("%Y-%m-%d") # type: str
else:
name = " ".join(split)
date = default_date
return name, date
def get_payee(self):
return self._extract_payee_and_date()[0]
def get_date(self):
return self._extract_payee_and_date()[1]
class LclProcessor(OfxBaseProcessor):
line_class = LclLine
account_name = "lcl"
command_name = "lcl"
def parse_file(self):
# The first line of this file needs to be removed.
# It contains something that is not part of the header of an OFX file.
try:
with open(self.filename, "r") as user_file:
data = user_file.read().splitlines(True)
except FileNotFoundError:
click.secho("Couldn't find ofx file", fg="red")
sys.exit(1)
if "Content-Type:" in data[0]:
with open(self.filename, "w") as temp_file:
temp_file.writelines(data[1:])
transactions = super(LclProcessor, self).parse_file()
if "Content-Type:" in data[0]:
with open(self.filename, "w") as temp_file:
temp_file.writelines(data)
return transactions
def main(filename, keep):
"""Import LCL bank statement (OFX file)."""
LclProcessor(filename).push_to_ynab(keep)