Mercurial > louis > ofxstatement-us-hsbc
annotate src/ofxstatement/plugins/us_hsbc/plugin.py @ 8:164da24a2997
Minor adjustments
Made those changes a couple weeks ago, can't exactly remember why :s.
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Thu, 01 Dec 2016 17:14:11 -0800 |
parents | 829eb62755b0 |
children | 28548158a325 |
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 enum |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
22 import locale |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
23 import logging |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
24 import pdb |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
25 import sys |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
26 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
27 from decimal import Decimal, Decimal as D |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
28 from ofxstatement.parser import CsvStatementParser |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
29 from ofxstatement.plugin import Plugin |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
30 from ofxstatement.statement import StatementLine, generate_transaction_id |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
31 from typing import Any, Dict, Iterable, List |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
32 from typing.io import TextIO |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
33 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
34 from .record import CsvIndexes, Record |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
35 from .transactions import enrich |
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 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
38 logger = logging.getLogger("ofxstatement.plugins.us_hsbc") |
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 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
41 @contextlib.contextmanager |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
42 def _override_locale(category, value): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
43 save = locale.getlocale(category) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
44 locale.setlocale(category, value) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
45 yield |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
46 locale.setlocale(category, save) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
47 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
48 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
49 class Parser(CsvStatementParser): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
50 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
51 date_format = "%m/%d/%Y" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
52 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
53 mappings: Dict[str, int] = { |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
54 "date": CsvIndexes.DATE.value, |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
55 "amount": CsvIndexes.AMOUNT.value, |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
56 } |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
57 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
58 _DESCRIPTION_PREFIX_TO_TRNTYPE: Dict[str, str] = { |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
59 "PURCHASE": "POS", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
60 "RETURN": "POS", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
61 "CASH WITHDRAWAL": "CASH", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
62 "CHECK": "CHECK", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
63 "CREDIT RECEIVED ON": "CREDIT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
64 "MISCELLANEOUS CREDIT": "CREDIT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
65 "CASH CONCENTRATION VENMO": "XFER", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
66 "DEPOSIT FROM": "DIRECTDEP", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
67 "DEPOSIT": "DEP", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
68 "INTEREST EARNED AND PAID": "INT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
69 "ONLINE PAYMENT TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
70 "PAY TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
71 "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
|
72 "PAYMENT TO": "PAYMENT", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
73 "REBATE OF ATM SURCHARGE": "DEP", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
74 "SERVICE CHG": "SRVCHG", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
75 "ATM OR OTHER ELECTRONIC BANKING TRANSACTION": "ATM", |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
76 } |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
77 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
78 def __init__(self, fin: TextIO) -> None: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
79 super(Parser, self).__init__(fin) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
80 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
81 self.statement.currency = "USD" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
82 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
|
83 self.statement.end_date = self.statement.start_date |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
84 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
85 def split_records(self) -> Iterable[str]: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
86 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
|
87 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
88 @classmethod |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
89 def _get_trntype(cls, record: Record) -> str: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
90 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
|
91 if record.original_description.upper().startswith(prefix): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
92 return trntype |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
93 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
94 if record.simple_description.upper() == "TRANSFER": |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
95 return "XFER" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
96 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
97 logger.info( |
8 | 98 "The transaction type for the following record couldn't be " |
99 "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
|
100 ) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
101 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
102 return "OTHER" |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
103 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
104 def parse_record(self, row: List[str]) -> StatementLine: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
105 if self.cur_record < 4: # starts at 1 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
106 logger.info("Skipping row: {}".format(row)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
107 return None # skip (all) the csv headers |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
108 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
109 try: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
110 sl = super(Parser, self).parse_record(row) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
111 record = Record(row) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
112 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
113 if record.currency != "$": |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
114 logger.warning( |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
115 "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
|
116 "USD".format(self.cur_record, ",".join(row)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
117 ) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
118 return None |
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 sl.trntype = self._get_trntype(record) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
121 enrich(sl, record) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
122 sl.id = generate_transaction_id(sl) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
123 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
124 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
|
125 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
|
126 except Exception: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
127 logger.exception("Parsing failed:") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
128 logger.info("Press {} to exit the debugger".format( |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
129 "^Z" if sys.platform.startswith("win32") else "^D" |
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 pdb.post_mortem() |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
132 sys.exit(1) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
133 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
134 return sl |
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 @_override_locale(locale.LC_NUMERIC, "en_US") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
137 def parse_decimal(self, value: str) -> Decimal: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
138 return D(locale.delocalize(value)) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
139 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
140 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
141 class HSBCUSAPlugin(Plugin): |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
142 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
143 DEFAULT_CHARSET = "latin1" |
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 def get_parser(self, filename: str) -> Parser: |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
146 encoding = self.settings.get("charset", HSBCUSAPlugin.DEFAULT_CHARSET) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
147 |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
148 # XXX: how does this gets closed? |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
149 fin = open(filename, "r", encoding=encoding) |
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 parser = Parser(fin) |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
152 parser.statement.bank_id = self.settings.get("routing_number") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
153 parser.statement.account_id = self.settings.get("account_number") |
829eb62755b0
First cut at an HSBC (USA) plugin
Louis Opter <kalessin@kalessin.fr>
parents:
diff
changeset
|
154 parser.statement.account_type = self.settings.get("account_type", "CHECKING") |
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 return parser |