tariochbctools 0.38.1__py2.py3-none-any.whl → 1.0.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. tariochbctools/importers/bcge/importer.py +4 -3
  2. tariochbctools/importers/bitst/importer.py +28 -19
  3. tariochbctools/importers/blockchain/importer.py +10 -9
  4. tariochbctools/importers/cembrastatement/importer.py +44 -28
  5. tariochbctools/importers/general/mailAdapterImporter.py +12 -13
  6. tariochbctools/importers/general/mt940importer.py +18 -19
  7. tariochbctools/importers/general/priceLookup.py +6 -6
  8. tariochbctools/importers/ibkr/importer.py +22 -19
  9. tariochbctools/importers/neon/importer.py +17 -15
  10. tariochbctools/importers/netbenefits/importer.py +24 -16
  11. tariochbctools/importers/nordigen/importer.py +7 -7
  12. tariochbctools/importers/nordigen/nordigen_config.py +12 -11
  13. tariochbctools/importers/postfinance/importer.py +20 -17
  14. tariochbctools/importers/quickfile/importer.py +11 -11
  15. tariochbctools/importers/raiffeisench/importer.py +3 -7
  16. tariochbctools/importers/revolut/importer.py +23 -18
  17. tariochbctools/importers/schedule/importer.py +11 -8
  18. tariochbctools/importers/swisscard/importer.py +17 -15
  19. tariochbctools/importers/transferwise/importer.py +15 -14
  20. tariochbctools/importers/truelayer/importer.py +25 -16
  21. tariochbctools/importers/viseca/importer.py +24 -16
  22. tariochbctools/importers/zak/importer.py +51 -44
  23. tariochbctools/importers/zkb/importer.py +3 -2
  24. tariochbctools/plugins/prices/ibkr.py +6 -3
  25. {tariochbctools-0.38.1.dist-info → tariochbctools-1.0.1.dist-info}/METADATA +6 -3
  26. tariochbctools-1.0.1.dist-info/RECORD +55 -0
  27. {tariochbctools-0.38.1.dist-info → tariochbctools-1.0.1.dist-info}/WHEEL +1 -1
  28. tariochbctools-0.38.1.dist-info/RECORD +0 -55
  29. {tariochbctools-0.38.1.dist-info → tariochbctools-1.0.1.dist-info}/LICENSE.txt +0 -0
  30. {tariochbctools-0.38.1.dist-info → tariochbctools-1.0.1.dist-info}/entry_points.txt +0 -0
  31. {tariochbctools-0.38.1.dist-info → tariochbctools-1.0.1.dist-info}/top_level.txt +0 -0
@@ -2,8 +2,10 @@ import base64
2
2
  import json
3
3
  from datetime import date, datetime, timezone
4
4
  from os import path
5
+ from typing import Any
5
6
  from urllib.parse import urlencode
6
7
 
8
+ import beangulp
7
9
  import dateutil.parser
8
10
  import requests
9
11
  import rsa
@@ -11,22 +13,21 @@ import urllib3
11
13
  import yaml
12
14
  from beancount.core import amount, data
13
15
  from beancount.core.number import D
14
- from beancount.ingest import importer
15
16
  from dateutil.relativedelta import relativedelta
16
17
 
17
18
  http = urllib3.PoolManager()
18
19
 
19
20
 
20
- class Importer(importer.ImporterProtocol):
21
+ class Importer(beangulp.Importer):
21
22
  """An importer for Transferwise using the API."""
22
23
 
23
- def identify(self, file):
24
- return path.basename(file.name).endswith("transferwise.yaml")
24
+ def identify(self, filepath: str) -> bool:
25
+ return path.basename(filepath).endswith("transferwise.yaml")
25
26
 
26
- def file_account(self, file):
27
+ def account(self, filepath: str) -> data.Account:
27
28
  return ""
28
29
 
29
- def __init__(self, *args, **kwargs):
30
+ def __init__(self, *args: Any, **kwargs: Any):
30
31
  if "profileId" in kwargs:
31
32
  self.profileId = kwargs.pop("profileId")
32
33
  if "startDate" in kwargs:
@@ -49,10 +50,10 @@ class Importer(importer.ImporterProtocol):
49
50
  # MIT license
50
51
  def _get_statement(
51
52
  self,
52
- currency,
53
- base_url,
54
- statement_type="FLAT",
55
- ):
53
+ currency: str,
54
+ base_url: str,
55
+ statement_type: str = "FLAT",
56
+ ) -> Any:
56
57
  params = urlencode(
57
58
  {
58
59
  "currency": currency,
@@ -78,8 +79,8 @@ class Importer(importer.ImporterProtocol):
78
79
  "Content-Type": "application/json",
79
80
  }
80
81
  if hasattr(self, "one_time_token"):
81
- headers["x-2fa-approval"] = self.one_time_token
82
- headers["X-Signature"] = self.signature
82
+ headers["x-2fa-approval"] = self.one_time_token # type: ignore
83
+ headers["X-Signature"] = self.signature # type: ignore
83
84
 
84
85
  r = http.request("GET", url, headers=headers, retries=False)
85
86
 
@@ -115,8 +116,8 @@ class Importer(importer.ImporterProtocol):
115
116
 
116
117
  return signature
117
118
 
118
- def extract(self, file, existing_entries):
119
- with open(file.name, "r") as f:
119
+ def extract(self, filepath, existing):
120
+ with open(filepath, "r") as f:
120
121
  config = yaml.safe_load(f)
121
122
  self.api_token = config["token"]
122
123
  baseAccount = config["baseAccount"]
@@ -1,13 +1,14 @@
1
1
  import logging
2
2
  from datetime import timedelta
3
3
  from os import path
4
+ from typing import Any
4
5
 
6
+ import beangulp
5
7
  import dateutil.parser
6
8
  import requests
7
9
  import yaml
8
10
  from beancount.core import amount, data
9
11
  from beancount.core.number import D
10
- from beancount.ingest import importer
11
12
 
12
13
  # https://docs.truelayer.com/#retrieve-account-transactions
13
14
 
@@ -24,7 +25,7 @@ TX_OPTIONAL_META_ID_FIELDS = (
24
25
  )
25
26
 
26
27
 
27
- class Importer(importer.ImporterProtocol):
28
+ class Importer(beangulp.Importer):
28
29
  """An importer for Truelayer API (e.g. for Revolut)."""
29
30
 
30
31
  def __init__(self):
@@ -33,17 +34,17 @@ class Importer(importer.ImporterProtocol):
33
34
  self.clientSecret = None
34
35
  self.refreshToken = None
35
36
  self.sandbox = None
36
- self.existing_entries = None
37
+ self.existing = None
37
38
  self.domain = "truelayer.com"
38
39
 
39
- def _configure(self, file, existing_entries):
40
- with open(file.name, "r") as f:
40
+ def _configure(self, filepath: str, existing: data.Entries) -> None:
41
+ with open(filepath, "r") as f:
41
42
  self.config = yaml.safe_load(f)
42
43
  self.clientId = self.config["client_id"]
43
44
  self.clientSecret = self.config["client_secret"]
44
45
  self.refreshToken = self.config["refresh_token"]
45
46
  self.sandbox = self.clientId.startswith("sandbox")
46
- self.existing_entries = existing_entries
47
+ self.existing = existing
47
48
 
48
49
  if self.sandbox:
49
50
  self.domain = "truelayer-sandbox.com"
@@ -51,14 +52,14 @@ class Importer(importer.ImporterProtocol):
51
52
  if "account" not in self.config and "accounts" not in self.config:
52
53
  raise KeyError("At least one of `account` or `accounts` must be specified")
53
54
 
54
- def identify(self, file):
55
- return path.basename(file.name).endswith("truelayer.yaml")
55
+ def identify(self, filepath: str) -> bool:
56
+ return path.basename(filepath).endswith("truelayer.yaml")
56
57
 
57
- def file_account(self, file):
58
+ def account(self, filepath: str) -> data.Account:
58
59
  return ""
59
60
 
60
- def extract(self, file, existing_entries=None):
61
- self._configure(file, existing_entries)
61
+ def extract(self, filepath: str, existing: data.Entries = None) -> data.Entries:
62
+ self._configure(filepath, existing)
62
63
 
63
64
  r = requests.post(
64
65
  f"https://auth.{self.domain}/connect/token",
@@ -81,7 +82,7 @@ class Importer(importer.ImporterProtocol):
81
82
 
82
83
  return entries
83
84
 
84
- def _get_account_for_account_id(self, account_id):
85
+ def _get_account_for_account_id(self, account_id: str) -> data.Account:
85
86
  """
86
87
  Find a matching account for the account ID.
87
88
  If the user hasn't specified any in the config, return
@@ -99,7 +100,9 @@ class Importer(importer.ImporterProtocol):
99
100
 
100
101
  return self.config["accounts"].get(account_id, None)
101
102
 
102
- def _extract_endpoint_transactions(self, endpoint, headers, invert_sign=False):
103
+ def _extract_endpoint_transactions(
104
+ self, endpoint: str, headers: dict[str, str], invert_sign: bool = False
105
+ ) -> data.Entries:
103
106
  entries = []
104
107
  r = requests.get(
105
108
  f"https://api.{self.domain}/data/v1/{endpoint}", headers=headers
@@ -137,7 +140,13 @@ class Importer(importer.ImporterProtocol):
137
140
 
138
141
  return entries
139
142
 
140
- def _extract_transaction(self, trx, local_account, transactions, invert_sign):
143
+ def _extract_transaction(
144
+ self,
145
+ trx: dict[str, Any],
146
+ local_account: data.Account,
147
+ transactions: list[Any],
148
+ invert_sign: bool,
149
+ ) -> data.Transaction:
141
150
  entries = []
142
151
  metakv = {}
143
152
 
@@ -187,8 +196,8 @@ class Importer(importer.ImporterProtocol):
187
196
  if trx["transaction_id"] == transactions[-1]["transaction_id"]:
188
197
  balDate = trxDate + timedelta(days=1)
189
198
  metakv = {}
190
- if self.existing_entries is not None:
191
- for exEntry in self.existing_entries:
199
+ if self.existing is not None:
200
+ for exEntry in self.existing:
192
201
  if (
193
202
  isinstance(exEntry, data.Balance)
194
203
  and exEntry.date == balDate
@@ -1,26 +1,32 @@
1
1
  import re
2
2
  from datetime import datetime
3
3
 
4
+ import beangulp
4
5
  import camelot
5
6
  from beancount.core import amount, data
6
7
  from beancount.core.number import D
7
- from beancount.ingest import importer
8
- from beancount.ingest.importers.mixins import identifier
9
8
 
10
9
 
11
- class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
10
+ class Importer(beangulp.Importer):
12
11
  """An importer for Viseca One Card Statement PDF files."""
13
12
 
14
- def __init__(self, regexps, account):
15
- identifier.IdentifyMixin.__init__(self, matchers=[("filename", regexps)])
16
- self.account = account
13
+ def __init__(self, filepattern: str, account: data.Account):
14
+ self._filepattern = filepattern
15
+ self._account = account
17
16
  self.currency = "CHF"
18
17
 
19
- def file_account(self, file):
20
- return self.account
18
+ def identify(self, filepath: str) -> bool:
19
+ return re.search(self._filepattern, filepath) is not None
21
20
 
22
- def createEntry(self, file, date, entryAmount, text):
21
+ def account(self, filepath: str) -> data.Account:
22
+ return self._account
23
+
24
+ def createEntry(
25
+ self, filepath: str, date: str, entryAmount: str | None, text: str
26
+ ) -> data.Transaction:
23
27
  amt = None
28
+ if not entryAmount:
29
+ entryAmount = ""
24
30
  entryAmount = entryAmount.replace("'", "")
25
31
  if "-" in entryAmount:
26
32
  amt = amount.Amount(D(entryAmount.strip(" -")), "CHF")
@@ -29,7 +35,7 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
29
35
 
30
36
  book_date = datetime.strptime(date, "%d.%m.%y").date()
31
37
 
32
- meta = data.new_metadata(file.name, 0)
38
+ meta = data.new_metadata(filepath, 0)
33
39
  return data.Transaction(
34
40
  meta,
35
41
  book_date,
@@ -39,11 +45,11 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
39
45
  data.EMPTY_SET,
40
46
  data.EMPTY_SET,
41
47
  [
42
- data.Posting(self.account, amt, None, None, None, None),
48
+ data.Posting(self._account, amt, None, None, None, None),
43
49
  ],
44
50
  )
45
51
 
46
- def extract(self, file, existing_entries):
52
+ def extract(self, filepath: str, existing: data.Entries) -> data.Entries:
47
53
  entries = []
48
54
 
49
55
  p = re.compile(r"^\d\d\.\d\d\.\d\d$")
@@ -51,7 +57,7 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
51
57
  columns = ["100,132,400,472,523"]
52
58
 
53
59
  firstPageTables = camelot.read_pdf(
54
- file.name,
60
+ filepath,
55
61
  flavor="stream",
56
62
  pages="1",
57
63
  table_regions=["65,450,585,50"],
@@ -59,7 +65,7 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
59
65
  split_text=True,
60
66
  )
61
67
  otherPageTables = camelot.read_pdf(
62
- file.name,
68
+ filepath,
63
69
  flavor="stream",
64
70
  pages="2-end",
65
71
  table_regions=["65,650,585,50"],
@@ -91,7 +97,9 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
91
97
  if amountChf:
92
98
  if lastTrxDate:
93
99
  entries.append(
94
- self.createEntry(file, lastTrxDate, lastAmount, lastDetails)
100
+ self.createEntry(
101
+ filepath, lastTrxDate, lastAmount, lastDetails
102
+ )
95
103
  )
96
104
 
97
105
  lastTrxDate = trxDate
@@ -102,7 +110,7 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
102
110
 
103
111
  if lastTrxDate:
104
112
  entries.append(
105
- self.createEntry(file, lastTrxDate, lastAmount, lastDetails)
113
+ self.createEntry(filepath, lastTrxDate, lastAmount, lastDetails)
106
114
  )
107
115
 
108
116
  return entries
@@ -1,32 +1,37 @@
1
1
  import re
2
2
  from datetime import timedelta
3
3
 
4
+ import beangulp
4
5
  import camelot
5
6
  import pandas as pd
6
7
  from beancount.core import amount, data
7
8
  from beancount.core.number import D
8
- from beancount.ingest import importer
9
- from beancount.ingest.importers.mixins import identifier
10
9
  from dateutil.parser import parse
11
10
 
12
11
 
13
- class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
12
+ class Importer(beangulp.Importer):
14
13
  """An importer for Bank Cler ZAK PDF files files."""
15
14
 
16
- def __init__(self, regexps, account):
17
- identifier.IdentifyMixin.__init__(self, matchers=[("filename", regexps)])
18
- self.account = account
15
+ def __init__(self, filepattern: str, account: data.Account):
16
+ self._filepattern = filepattern
17
+ self._account = account
19
18
 
20
- def file_account(self, file):
21
- return self.account
19
+ def account(self, filepath: str) -> data.Account:
20
+ return self._account
22
21
 
23
- def createEntry(self, file, date, amt, text):
22
+ def identify(self, filepath: str) -> bool:
23
+ return re.search(self._filepattern, filepath) is not None
24
+
25
+ def createEntry(
26
+ self, filepath: str, date: str, amt: str, text: str
27
+ ) -> data.Transaction:
24
28
  bookingNrRgexp = re.compile(r"BC Buchungsnr. (?P<bookingRef>\d+)$")
25
29
  m = bookingNrRgexp.search(text)
26
- bookingRef = m.group("bookingRef")
27
- text = re.sub(bookingNrRgexp, "", text)
30
+ if m:
31
+ bookingRef = m.group("bookingRef")
32
+ text = re.sub(bookingNrRgexp, "", text)
28
33
 
29
- meta = data.new_metadata(file.name, 0, {"zakref": bookingRef})
34
+ meta = data.new_metadata(filepath, 0, {"zakref": bookingRef})
30
35
  return data.Transaction(
31
36
  meta,
32
37
  parse(date.strip(), dayfirst=True).date(),
@@ -37,41 +42,41 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
37
42
  data.EMPTY_SET,
38
43
  [
39
44
  data.Posting(
40
- self.account, amount.Amount(D(amt), "CHF"), None, None, None, None
45
+ self._account, amount.Amount(D(amt), "CHF"), None, None, None, None
41
46
  ),
42
47
  ],
43
48
  )
44
49
 
45
- def createBalanceEntry(self, file, date, amt):
46
- meta = data.new_metadata(file.name, 0)
50
+ def createBalanceEntry(self, filepath: str, date: str, amt: str) -> data.Balance:
51
+ meta = data.new_metadata(filepath, 0)
47
52
  return data.Balance(
48
53
  meta,
49
54
  parse(date.strip(), dayfirst=True).date() + timedelta(days=1),
50
- self.account,
55
+ self._account,
51
56
  amount.Amount(D(amt), "CHF"),
52
57
  None,
53
58
  None,
54
59
  )
55
60
 
56
- def cleanNumber(self, number):
61
+ def cleanNumber(self, number: str | data.Decimal) -> data.Decimal:
57
62
  if isinstance(number, str):
58
63
  return D(number.replace("'", ""))
59
64
  else:
60
65
  return number
61
66
 
62
- def extract(self, file, existing_entries):
67
+ def extract(self, filepath: str, existing: data.Entries) -> data.Entries:
63
68
  entries = []
64
69
 
65
70
  firstPageTables = camelot.read_pdf(
66
- file.name, flavor="stream", pages="1", table_regions=["60,450,600,170"]
71
+ filepath, flavor="stream", pages="1", table_regions=["60,450,600,170"]
67
72
  )
68
73
  otherPageTables = camelot.read_pdf(
69
- file.name, flavor="stream", pages="2-end", table_regions=["60,630,600,170"]
74
+ filepath, flavor="stream", pages="2-end", table_regions=["60,630,600,170"]
70
75
  )
71
76
 
72
77
  tables = [*firstPageTables, *otherPageTables]
73
78
 
74
- df = None
79
+ df: pd.DataFrame | None = None
75
80
  for table in tables:
76
81
  cur_df = table.df
77
82
  new_header = cur_df.iloc[0]
@@ -87,36 +92,38 @@ class Importer(identifier.IdentifyMixin, importer.ImporterProtocol):
87
92
  text = ""
88
93
  amount = None
89
94
  saldo = None
90
- for row in df.itertuples():
91
- if row.Saldo:
92
- if date and amount:
93
- entries.append(self.createEntry(file, date, amount, text))
95
+ if df:
96
+ for row in df.itertuples():
97
+ if row.Saldo:
98
+ if date and amount:
99
+ entries.append(self.createEntry(filepath, date, amount, text))
94
100
 
95
- date = None
96
- amount = None
97
- text = ""
101
+ date = None
102
+ amount = None
103
+ text = ""
98
104
 
99
- if row.Valuta:
100
- date = row.Valuta
105
+ if row.Valuta:
106
+ date = row.Valuta
101
107
 
102
- if row.Text:
103
- text += " " + row.Text
108
+ if row.Text:
109
+ text += " " + row.Text
104
110
 
105
- if row.Belastung:
106
- amount = -self.cleanNumber(row.Belastung)
111
+ if row.Belastung:
112
+ amount = -self.cleanNumber(row.Belastung)
107
113
 
108
- if row.Gutschrift:
109
- amount = self.cleanNumber(row.Gutschrift)
114
+ if row.Gutschrift:
115
+ amount = self.cleanNumber(row.Gutschrift)
110
116
 
111
- if row.Saldo:
112
- saldo = self.cleanNumber(row.Saldo)
117
+ if row.Saldo:
118
+ saldo = self.cleanNumber(row.Saldo)
113
119
 
114
- if date and amount:
115
- entries.append(self.createEntry(file, date, amount, text))
120
+ if date and amount:
121
+ entries.append(self.createEntry(filepath, date, amount, text))
116
122
 
117
- dateRegexp = re.compile(r"\d\d\.\d\d\.\d\d\d\d")
118
- m = dateRegexp.search(text)
119
- date = m.group()
120
- entries.append(self.createBalanceEntry(file, date, saldo))
123
+ dateRegexp = re.compile(r"\d\d\.\d\d\.\d\d\d\d")
124
+ m = dateRegexp.search(text)
125
+ if m and saldo:
126
+ date = m.group()
127
+ entries.append(self.createBalanceEntry(filepath, date, saldo))
121
128
 
122
129
  return entries
@@ -1,13 +1,14 @@
1
1
  import re
2
+ from typing import Any
2
3
 
3
4
  from tariochbctools.importers.general import mt940importer
4
5
 
5
6
 
6
7
  class ZkbImporter(mt940importer.Importer):
7
- def prepare_payee(self, trxdata):
8
+ def prepare_payee(self, trxdata: dict[str, Any]) -> str:
8
9
  return ""
9
10
 
10
- def prepare_narration(self, trxdata):
11
+ def prepare_narration(self, trxdata: dict[str, Any]) -> str:
11
12
  extra = trxdata["extra_details"]
12
13
  details = trxdata["transaction_details"]
13
14
 
@@ -1,15 +1,16 @@
1
1
  from datetime import datetime
2
2
  from os import environ
3
3
  from time import sleep
4
+ from typing import Optional
4
5
 
5
6
  from beancount.core.number import D
6
- from beancount.prices import source
7
+ from beanprice import source
7
8
  from dateutil import tz
8
9
  from ibflex import client, parser
9
10
 
10
11
 
11
12
  class Source(source.Source):
12
- def get_latest_price(self, ticker: str):
13
+ def get_latest_price(self, ticker: str) -> source.SourcePrice | None:
13
14
  token: str = environ["IBKR_TOKEN"]
14
15
  queryId: str = environ["IBKR_QUERY_ID"]
15
16
 
@@ -36,5 +37,7 @@ class Source(source.Source):
36
37
 
37
38
  return None
38
39
 
39
- def get_historical_price(self, ticker, time):
40
+ def get_historical_price(
41
+ self, ticker: str, time: datetime
42
+ ) -> Optional[source.SourcePrice]:
40
43
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tariochbctools
3
- Version: 0.38.1
3
+ Version: 1.0.1
4
4
  Summary: Importers, plugins and price fetchers for Beancount
5
5
  Home-page: https://github.com/tarioch/beancounttools/
6
6
  Author: Patrick Ruckstuhl
@@ -19,7 +19,10 @@ Classifier: Topic :: Office/Business :: Financial :: Investment
19
19
  Classifier: License :: OSI Approved :: MIT License
20
20
  Description-Content-Type: text/x-rst; charset=UTF-8
21
21
  License-File: LICENSE.txt
22
- Requires-Dist: beancount<3,>=2
22
+ Requires-Dist: importlib-metadata; python_version < "3.8"
23
+ Requires-Dist: beancount>=3
24
+ Requires-Dist: beangulp
25
+ Requires-Dist: beanprice
23
26
  Requires-Dist: bitstampclient
24
27
  Requires-Dist: mt-940
25
28
  Requires-Dist: pyyaml
@@ -30,7 +33,7 @@ Requires-Dist: opencv-python
30
33
  Requires-Dist: blockcypher
31
34
  Requires-Dist: imap-tools
32
35
  Requires-Dist: undictify
33
- Requires-Dist: importlib-metadata; python_version < "3.8"
36
+ Requires-Dist: rsa
34
37
  Provides-Extra: testing
35
38
  Requires-Dist: pytest; extra == "testing"
36
39
  Requires-Dist: pytest-cov; extra == "testing"
@@ -0,0 +1,55 @@
1
+ tariochbctools/__init__.py,sha256=pH5i4Fj1tbXLqLtTVIdoojiplZssQn0nnud8-HXodRE,577
2
+ tariochbctools/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ tariochbctools/importers/bcge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ tariochbctools/importers/bcge/importer.py,sha256=bAQpkBLURatdsfSoMQdiha-8QfExAXXvpzAgnFFMwoE,1176
5
+ tariochbctools/importers/bitst/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ tariochbctools/importers/bitst/importer.py,sha256=PPhg7SspZhY8X3jpnR_t-RrLE-vY9l3wD8hWRqwkbtA,5430
7
+ tariochbctools/importers/blockchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ tariochbctools/importers/blockchain/importer.py,sha256=Zuld8oll5sItApRSXR-WjhdYywOgi_PoGF3f0uIwRZc,2272
9
+ tariochbctools/importers/cembrastatement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ tariochbctools/importers/cembrastatement/importer.py,sha256=2vY7bBsVaYoluVO3iGbhcoP2N9eQMYSzjxFgLTCeLT0,3915
11
+ tariochbctools/importers/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ tariochbctools/importers/general/mailAdapterImporter.py,sha256=BHzO38YkWpJf7eB0VHdSr0VtKNuDn5WAI4Y9Edhhlcg,1771
13
+ tariochbctools/importers/general/mt940importer.py,sha256=7fErPpBdpLxICX3lGKtAiVwMW8dudarjDcF-ooFC7mA,2071
14
+ tariochbctools/importers/general/priceLookup.py,sha256=QjwhxOYuEATwtaHnJ9OKl3D6JcnDJQS_5Wo7dQmFDFM,865
15
+ tariochbctools/importers/ibkr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ tariochbctools/importers/ibkr/importer.py,sha256=E-xTEbUtdwCOOvgiPxCanzmiH_IRcSY4aWuZKZ3cyhI,8883
17
+ tariochbctools/importers/neon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ tariochbctools/importers/neon/importer.py,sha256=kz8IEWXh8Sd8ysfKTQ49-rN5RgeD59pB4OgoA3gHLkY,2565
19
+ tariochbctools/importers/netbenefits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ tariochbctools/importers/netbenefits/importer.py,sha256=nzjz12uzi8ozYaOFW5S8U1LPToxk8C0jESL8X6Ex6CY,5904
21
+ tariochbctools/importers/nordigen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ tariochbctools/importers/nordigen/importer.py,sha256=854yYnsCGGEGb5XhDjZY1BzC9m6y276U-02114M4iqE,3779
23
+ tariochbctools/importers/nordigen/nordigen_config.py,sha256=cbv7DkGrQ6SzX0L1m25nHi3UH9Oi9tgQGkRmjoZ1QXk,5122
24
+ tariochbctools/importers/postfinance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ tariochbctools/importers/postfinance/importer.py,sha256=PLBbnswb_tHt8wzd7yCC4UAWHoPn3WcJIXaOMewz6fc,2524
26
+ tariochbctools/importers/quickfile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ tariochbctools/importers/quickfile/importer.py,sha256=HgS7lSi7egxkj-IWd77MS-vhepYNCRXZwVbeCornkzg,6479
28
+ tariochbctools/importers/raiffeisench/importer.py,sha256=5r7hHEG0ZtEp-ePlsF4aHapBv9DJgjeVxE1m_G62bLU,912
29
+ tariochbctools/importers/revolut/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ tariochbctools/importers/revolut/importer.py,sha256=5jI91gGIDcP2TMFcauKkA9OWCTqCIl5Phz9n6r9kOeI,3953
31
+ tariochbctools/importers/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ tariochbctools/importers/schedule/importer.py,sha256=s5j4nZGifymgxzNRn3FvaCkrDBBVex0tMjPsLIghwCs,1650
33
+ tariochbctools/importers/swisscard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ tariochbctools/importers/swisscard/importer.py,sha256=84nyAHzz5Y8mHw-zCkoUE0CsaEb8W8C_TbTRHleg_3A,1887
35
+ tariochbctools/importers/transferwise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ tariochbctools/importers/transferwise/importer.py,sha256=qZEIUAQkfszfyY44jyd1OE1XygsTUxpVnSq6MeJ9rOg,6179
37
+ tariochbctools/importers/truelayer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ tariochbctools/importers/truelayer/importer.py,sha256=fkASr_cqxkGPf45Eltl4rwKdwoMN0ild3HbCPLk_r1U,7172
39
+ tariochbctools/importers/viseca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ tariochbctools/importers/viseca/importer.py,sha256=o-zWruMMuSAuwqq4cUQ6cTZI91paBENQShzGK4VdIJg,3348
41
+ tariochbctools/importers/zak/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ tariochbctools/importers/zak/importer.py,sha256=SbeE-3ynFefXGQGxUFTlK4AuB_YKWqqgpturUPv8qnA,3961
43
+ tariochbctools/importers/zkb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ tariochbctools/importers/zkb/importer.py,sha256=Gm3ql1OHp0dFzJHph1dqyfF4zHNAo00VEiO-WXowtwY,1490
45
+ tariochbctools/plugins/__init__.py,sha256=DSZtoTVosmExbFmMlHVrZAxKewEILDZlGh_7-uWcc_w,26
46
+ tariochbctools/plugins/check_portfolio_sum.py,sha256=naJ2j6BFpQhJhT2c-gfjyIdcYe0l_ZzpdlqgwrsIv2g,2340
47
+ tariochbctools/plugins/generate_base_ccy_prices.py,sha256=Phw314qox3jpNgC5-GcnmyYcLkMkrd8xsWS-wYwdj6o,1236
48
+ tariochbctools/plugins/prices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ tariochbctools/plugins/prices/ibkr.py,sha256=GYCjnlF-MK-ZFPEr0M6T4iO3Etq0tMmrMlsHGInXUO8,1405
50
+ tariochbctools-1.0.1.dist-info/LICENSE.txt,sha256=VR2hkz3p9Sw4hSXc7S5iZTOXGeV4h-i8AO_q0zEmtkE,1074
51
+ tariochbctools-1.0.1.dist-info/METADATA,sha256=x3oqqW7r-EHMuY9xiUPoI-R3VcM_sn-6G8OEx7I6Rwc,2168
52
+ tariochbctools-1.0.1.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
53
+ tariochbctools-1.0.1.dist-info/entry_points.txt,sha256=9xrCCY1wx2zCIsQUOWZelLHDmHw9Oc-ZBAKUIY9lKTA,88
54
+ tariochbctools-1.0.1.dist-info/top_level.txt,sha256=CiA_NepCI6zDNsaORA55zmpuJFSnTvLESraIL13xiOQ,15
55
+ tariochbctools-1.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any
@@ -1,55 +0,0 @@
1
- tariochbctools/__init__.py,sha256=pH5i4Fj1tbXLqLtTVIdoojiplZssQn0nnud8-HXodRE,577
2
- tariochbctools/importers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- tariochbctools/importers/bcge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- tariochbctools/importers/bcge/importer.py,sha256=0_OVd-xM4lM5SPvzKwe4bRzkBxx666fVw_hUK9rvcOc,1095
5
- tariochbctools/importers/bitst/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- tariochbctools/importers/bitst/importer.py,sha256=qPGN5wy5-G4WDStG32f_OCxynhtyNyLjvXLybhhiRaQ,5105
7
- tariochbctools/importers/blockchain/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- tariochbctools/importers/blockchain/importer.py,sha256=1K6J6J3DEOKs1Zw2wDxbUzVluFhZlxxIXwyE48IqRM0,2190
9
- tariochbctools/importers/cembrastatement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- tariochbctools/importers/cembrastatement/importer.py,sha256=fqfJxcU1SDiyyV3iDvfvkHXX3FefMmUNMNI5iCDOFis,3403
11
- tariochbctools/importers/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- tariochbctools/importers/general/mailAdapterImporter.py,sha256=B6r9ycPY1ZiWFPNnl2-h73OgMZAMaq_QSdURW6gxR3c,1805
13
- tariochbctools/importers/general/mt940importer.py,sha256=gLE77YhMaQdHE3nDg344eLh-hSofGKHTW5O_h6kmUdM,2102
14
- tariochbctools/importers/general/priceLookup.py,sha256=2nqDcSHC2BMmfSaJtgdmZKNejvTglmAj4oMqOf-SLXg,839
15
- tariochbctools/importers/ibkr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- tariochbctools/importers/ibkr/importer.py,sha256=ie8LjnIpok8bWGGItxfin_aBSyqe5DXpGSdg3kcNID0,8616
17
- tariochbctools/importers/neon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- tariochbctools/importers/neon/importer.py,sha256=SNG6podG1PI3gABy6eYfv1-mRnPwRjK-j5_GoNz2-Wc,2547
19
- tariochbctools/importers/netbenefits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- tariochbctools/importers/netbenefits/importer.py,sha256=V1C9t9LU09osxBDOz-V8DL4LxhtnuhLRj6WV_idxrTM,5816
21
- tariochbctools/importers/nordigen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- tariochbctools/importers/nordigen/importer.py,sha256=zj2JcDhaP_WXA1H_ZRyqFiN3EqsvY_ZZWLdJiBoijW8,3743
23
- tariochbctools/importers/nordigen/nordigen_config.py,sha256=jT4vgEKc35qgXqF8_bRbXLHUrkgsSDKHfhDbEw5OXD4,4903
24
- tariochbctools/importers/postfinance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- tariochbctools/importers/postfinance/importer.py,sha256=1oY_9PzUlkJw_gABqHXZ2CaB06xegzNGkc_U3Eoci1M,2452
26
- tariochbctools/importers/quickfile/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- tariochbctools/importers/quickfile/importer.py,sha256=0HRVl-OXkCq8T5Uz04gGCGlkRXZ3Mp1y8AldW8ezBHg,6544
28
- tariochbctools/importers/raiffeisench/importer.py,sha256=L6X0vlAuL8__DmZbs_T-r-A8SH9VH05KLkL7SubFouA,995
29
- tariochbctools/importers/revolut/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- tariochbctools/importers/revolut/importer.py,sha256=TtGzHl5v_i7IYBNFkdNosIvpBRO6_p5i_7qU2Cml2L0,3885
31
- tariochbctools/importers/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- tariochbctools/importers/schedule/importer.py,sha256=g1q7NwGzwkj25LknOguf3b7iJ0v4JXET01a8N3cWu2U,1526
33
- tariochbctools/importers/swisscard/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- tariochbctools/importers/swisscard/importer.py,sha256=CTJOJMe_QRPzGPPvkhHe4S0aqzBXbPCrkpcFGqOTrz8,1864
35
- tariochbctools/importers/transferwise/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- tariochbctools/importers/transferwise/importer.py,sha256=czCUtcfOA9XlsP3HKN8DZ7wTDMTllitJXKdr019GJoI,6089
37
- tariochbctools/importers/truelayer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- tariochbctools/importers/truelayer/importer.py,sha256=3bNtN2wKg473whmRVH2JSOIim_0vUFA6omTC3P5EV2A,6938
39
- tariochbctools/importers/viseca/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- tariochbctools/importers/viseca/importer.py,sha256=hccqRX6sEuRjPcYBV8hQ2zLG1pjeqzAyKd0rDEqM6oc,3123
41
- tariochbctools/importers/zak/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- tariochbctools/importers/zak/importer.py,sha256=9HyFhsavUHLAlO1Pi3eJ7qlNmPsmKzC0oFNf2u3HJkI,3601
43
- tariochbctools/importers/zkb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- tariochbctools/importers/zkb/importer.py,sha256=yrUck3DL2uyuliw0OTBGqBLYl8WBHxgTNnmaG_vA68o,1421
45
- tariochbctools/plugins/__init__.py,sha256=DSZtoTVosmExbFmMlHVrZAxKewEILDZlGh_7-uWcc_w,26
46
- tariochbctools/plugins/check_portfolio_sum.py,sha256=naJ2j6BFpQhJhT2c-gfjyIdcYe0l_ZzpdlqgwrsIv2g,2340
47
- tariochbctools/plugins/generate_base_ccy_prices.py,sha256=Phw314qox3jpNgC5-GcnmyYcLkMkrd8xsWS-wYwdj6o,1236
48
- tariochbctools/plugins/prices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- tariochbctools/plugins/prices/ibkr.py,sha256=9OwaZvI55bCj7H80K2iLZVsGLpuCyaoCnyuTS9e1_-c,1294
50
- tariochbctools-0.38.1.dist-info/LICENSE.txt,sha256=VR2hkz3p9Sw4hSXc7S5iZTOXGeV4h-i8AO_q0zEmtkE,1074
51
- tariochbctools-0.38.1.dist-info/METADATA,sha256=QH4ZUYd9YoyXEbWc2f3in6HLQtlXtf-o2kfSi3iw_a8,2104
52
- tariochbctools-0.38.1.dist-info/WHEEL,sha256=AHX6tWk3qWuce7vKLrj7lnulVHEdWoltgauo8bgCXgU,109
53
- tariochbctools-0.38.1.dist-info/entry_points.txt,sha256=9xrCCY1wx2zCIsQUOWZelLHDmHw9Oc-ZBAKUIY9lKTA,88
54
- tariochbctools-0.38.1.dist-info/top_level.txt,sha256=CiA_NepCI6zDNsaORA55zmpuJFSnTvLESraIL13xiOQ,15
55
- tariochbctools-0.38.1.dist-info/RECORD,,