Mercurial > louis > ofxstatement-us-hsbc
annotate src/ofxstatement/plugins/us_hsbc/plugin.py @ 9:28548158a325 default tip
Some minor improvements/fixes
This will eventually evolve to something more generic, since I have re-used the
same design, and some of the parts here, to write a plugin for Charles Schwab.
author | Louis Opter <louis@opter.org> |
---|---|
date | Thu, 09 Mar 2017 22:55:02 -0800 |
parents | 164da24a2997 |
children |
rev | line source |
---|---|
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
1 # Copyright (c) 2016, Louis Opter <louis@opter.org> |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
2 # |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
3 # This file is part of ofxstatement-us-hsbc. |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
4 # |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
5 # ofxstatement-us-hsbc is free software: you can redistribute it and/or |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
6 # modify it under the terms of the GNU General Public License as |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
7 # published by the Free Software Foundation, either version 3 of the |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
8 # License, or (at your option) any later version. |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
9 # |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
10 # ofxstatement-us-hsbc is distributed in the hope that it will be |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
11 # useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
12 # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
13 # GNU General Public License for more details. |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
14 # |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
15 # You should have received a copy of the GNU General Public License |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
17 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
18 import contextlib |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
19 import csv |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
20 import datetime |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
21 import locale |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
22 import logging |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
23 import pdb |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
24 import sys |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
25 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
26 from decimal import Decimal, Decimal as D |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
27 from ofxstatement.parser import CsvStatementParser |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
28 from ofxstatement.plugin import Plugin |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
29 from ofxstatement.statement import StatementLine, generate_transaction_id |
9 | 30 from typing import Dict, Generator, Iterable, List |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
31 from typing.io import TextIO |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
32 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
33 from .record import CsvIndexes, Record |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
34 from .transactions import enrich |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
35 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
36 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
37 logger = logging.getLogger("ofxstatement.plugins.us_hsbc") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
38 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
39 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
40 @contextlib.contextmanager |
9 | 41 def _override_locale(category: int, value: str) -> Generator[None, None, None]: |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
42 save = locale.getlocale(category) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
43 locale.setlocale(category, value) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
44 yield |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
45 locale.setlocale(category, save) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
46 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
47 |
9 | 48 class _spawn_debugger_on_exception: |
49 | |
50 def __init__(self, errmsg: str) -> None: | |
51 self._errmsg = errmsg | |
52 | |
53 def __enter__(self) -> None: | |
54 pass | |
55 | |
56 def __exit__(self, exc_type, exc_value, exc_tb) -> bool: | |
57 if exc_value is not None: | |
58 logger.exception(self._errmsg) | |
59 logger.info("Press {} to exit the debugger".format( | |
60 "^Z" if sys.platform.startswith("win32") else "^D" | |
61 )) | |
62 pdb.post_mortem() | |
63 sys.exit(1) | |
64 | |
65 | |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
66 class Parser(CsvStatementParser): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
67 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
68 date_format = "%m/%d/%Y" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
69 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
70 mappings: Dict[str, int] = { |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
71 "date": CsvIndexes.DATE.value, |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
72 "amount": CsvIndexes.AMOUNT.value, |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
73 } |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
74 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
75 _DESCRIPTION_PREFIX_TO_TRNTYPE: Dict[str, str] = { |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
76 "PURCHASE": "POS", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
77 "RETURN": "POS", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
78 "CASH WITHDRAWAL": "CASH", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
79 "CHECK": "CHECK", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
80 "CREDIT RECEIVED ON": "CREDIT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
81 "MISCELLANEOUS CREDIT": "CREDIT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
82 "CASH CONCENTRATION VENMO": "XFER", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
83 "DEPOSIT FROM": "DIRECTDEP", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
84 "DEPOSIT": "DEP", |
9 | 85 "HSBC SECURITIES": "XFER", |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
86 "INTEREST EARNED AND PAID": "INT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
87 "ONLINE PAYMENT TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
88 "PAY TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
89 "PAYMENT -": "PAYMENT", # receiving a payment (e.g: on your CC account) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
90 "PAYMENT TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
91 "REBATE OF ATM SURCHARGE": "DEP", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
92 "SERVICE CHG": "SRVCHG", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
93 "ATM OR OTHER ELECTRONIC BANKING TRANSACTION": "ATM", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
94 } |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
95 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
96 def __init__(self, fin: TextIO) -> None: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
97 super(Parser, self).__init__(fin) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
98 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
99 self.statement.currency = "USD" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
100 self.statement.start_date = datetime.datetime.now() # timezones pls? |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
101 self.statement.end_date = self.statement.start_date |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
102 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
103 def split_records(self) -> Iterable[str]: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
104 return csv.reader(self.fin, delimiter=",", quotechar='"', strict=True) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
105 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
106 @classmethod |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
107 def _get_trntype(cls, record: Record) -> str: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
108 for prefix, trntype in cls._DESCRIPTION_PREFIX_TO_TRNTYPE.items(): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
109 if record.original_description.upper().startswith(prefix): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
110 return trntype |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
111 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
112 if record.simple_description.upper() == "TRANSFER": |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
113 return "XFER" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
114 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
115 logger.info( |
8 | 116 "The transaction type for the following record couldn't be " |
117 "determined and will default to OTHER: {}".format(record) | |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
118 ) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
119 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
120 return "OTHER" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
121 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
122 def parse_record(self, row: List[str]) -> StatementLine: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
123 if self.cur_record < 4: # starts at 1 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
124 logger.info("Skipping row: {}".format(row)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
125 return None # skip (all) the csv headers |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
126 |
9 | 127 with _spawn_debugger_on_exception("Parsing failed:"): |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
128 sl = super(Parser, self).parse_record(row) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
129 record = Record(row) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
130 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
131 if record.currency != "$": |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
132 logger.warning( |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
133 "Skipping record {} ({}) which doesn't appear to be in " |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
134 "USD".format(self.cur_record, ",".join(row)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
135 ) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
136 return None |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
137 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
138 sl.trntype = self._get_trntype(record) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
139 enrich(sl, record) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
140 sl.id = generate_transaction_id(sl) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
141 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
142 self.statement.start_date = min(sl.date, self.statement.start_date) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
143 self.statement.end_date = max(sl.date, self.statement.end_date) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
144 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
145 return sl |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
146 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
147 @_override_locale(locale.LC_NUMERIC, "en_US") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
148 def parse_decimal(self, value: str) -> Decimal: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
149 return D(locale.delocalize(value)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
150 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
151 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
152 class HSBCUSAPlugin(Plugin): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
153 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
154 DEFAULT_CHARSET = "latin1" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
155 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
156 def get_parser(self, filename: str) -> Parser: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
157 encoding = self.settings.get("charset", HSBCUSAPlugin.DEFAULT_CHARSET) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
158 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
159 # XXX: how does this gets closed? |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
160 fin = open(filename, "r", encoding=encoding) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
161 |
9 | 162 p = Parser(fin) |
163 p.statement.bank_id = self.settings.get("routing_number") | |
164 p.statement.account_id = self.settings.get("account_number") | |
165 p.statement.account_type = self.settings.get("account_type", "CHECKING") | |
7
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
166 |
9 | 167 return p |