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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
48 class _spawn_debugger_on_exception:
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
49
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
50 def __init__(self, errmsg: str) -> None:
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
51 self._errmsg = errmsg
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
52
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
53 def __enter__(self) -> None:
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
54 pass
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
55
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
56 def __exit__(self, exc_type, exc_value, exc_tb) -> bool:
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
57 if exc_value is not None:
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
58 logger.exception(self._errmsg)
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
59 logger.info("Press {} to exit the debugger".format(
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
60 "^Z" if sys.platform.startswith("win32") else "^D"
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
61 ))
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
62 pdb.post_mortem()
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
63 sys.exit(1)
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
64
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
164da24a2997 Minor adjustments
Louis Opter <kalessin@kalessin.fr>
parents: 7
diff changeset
116 "The transaction type for the following record couldn't be "
164da24a2997 Minor adjustments
Louis Opter <kalessin@kalessin.fr>
parents: 7
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
162 p = Parser(fin)
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
163 p.statement.bank_id = self.settings.get("routing_number")
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
164 p.statement.account_id = self.settings.get("account_number")
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
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
28548158a325 Some minor improvements/fixes
Louis Opter <louis@opter.org>
parents: 8
diff changeset
167 return p