Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
ac7af15
Make the swisscard importer work with the new statement CSV format.
5Ub-Z3r0 Jul 5, 2024
62e07ff
Keys should be non-spaced strings.
5Ub-Z3r0 Jul 5, 2024
9c70357
Keys should be lowercase. Too much coding after midnight.
5Ub-Z3r0 Jul 5, 2024
b06aba8
for now force to use beancount 2
tarioch Jul 5, 2024
888b5ab
Merge pull request #112 from tarioch/bugfix/force_beancount_2
tarioch Jul 5, 2024
35b0b15
Remove unused and currently non working pyscaffold intersphinx mapping
tarioch Jul 5, 2024
e2a5c88
Merge pull request #113 from tarioch/bugfix/drop/broken_pyscaffold_in…
tarioch Jul 5, 2024
6b386de
Merge branch 'tarioch:master' into master
5Ub-Z3r0 Jul 5, 2024
5d4fa30
Merge pull request #111 from 5Ub-Z3r0/master
tarioch Jul 5, 2024
d7085df
Initial version of an importer for netbenefits trx
tarioch Jul 5, 2024
a14a159
Upgrade precommit hooks
tarioch Jul 6, 2024
6d8f1a6
Merge pull request #114 from tarioch/feature/fidelity_netbenefits_imp…
tarioch Jul 6, 2024
928b84d
[Revolut] Import the fees from the CSV
alvarogarcia7 Jul 27, 2024
ec38f57
[Revolut] Better comparison with ZERO
alvarogarcia7 Jul 27, 2024
cf4cf97
[Revolut] Capture the fee from the CSV into a new transaction
alvarogarcia7 Aug 1, 2024
c758eae
Update importer.py
alvarogarcia7 Aug 1, 2024
76e9737
Fixes from pre-commit
alvarogarcia7 Aug 5, 2024
4b3e52c
Merge pull request #115 from alvarogarcia7/patch-1
tarioch Aug 5, 2024
63acb15
make transactionId optional, fixes #116
tarioch Oct 3, 2024
5c3a1bf
Merge pull request #117 from tarioch/bugfix/nordigen_transaction_id_o…
tarioch Oct 3, 2024
cb8cb4a
Mention that Nordigen is now called GoCardless
carposio Oct 24, 2024
a269cd9
Fix heading underline
carposio Oct 24, 2024
0f6c571
Merge pull request #118 from carposio/patch-2
tarioch Oct 24, 2024
6e6f85a
Upgrade for beancount3/beangulp
tarioch Dec 27, 2024
e9af0af
Merge pull request #119 from tarioch/feature/beancount3
tarioch Jan 2, 2025
4eed081
Use CostSpec instead of Cost
tarioch Jan 2, 2025
fd09e6f
Merge pull request #120 from tarioch/feature/beancount3
tarioch Jan 2, 2025
a1d9982
Implement deduplication based on references for the importers that ha…
tarioch Jan 3, 2025
3a466cb
Merge pull request #121 from tarioch/feature/include_duplicate
tarioch Jan 3, 2025
4552364
issue122 (unnecessarily base currency to base currency price entries)…
Ev2geny Mar 19, 2025
1492ad9
formatting changes to fix pre-commit complaints
Ev2geny Mar 19, 2025
fae22cb
Merge pull request #123 from Ev2geny/issue_122
tarioch Mar 19, 2025
94e6111
Adding radicant importer
tarioch May 1, 2025
28fef43
Merge pull request #125 from tarioch/feature/radicant
tarioch May 1, 2025
5ade863
upgrade precommit checks
tarioch May 1, 2025
599bb76
Merge pull request #126 from tarioch/chore/precommitupgrade
tarioch May 1, 2025
8166c17
Fix arguments for blockchain importer
cwilhelm May 13, 2025
ca6398a
Merge pull request #130 from cwilhelm/master
tarioch May 13, 2025
6e1cfeb
Tuning viseca table detection to cover more cases
tarioch Jun 9, 2025
f549d68
Merge pull request #131 from tarioch/bugfix/viseca
tarioch Jun 9, 2025
8caaed7
Adjustments for slightly changed radicant report starting from June
tarioch Jul 4, 2025
b82bcd3
Merge pull request #132 from tarioch/bugfix/radicant
tarioch Jul 4, 2025
ed5b111
Update importer.py
Akuukis Aug 30, 2025
6318949
Merge pull request #133 from Akuukis/patch-1
tarioch Aug 30, 2025
6168ea5
feat(nordigen): customize link agreement
Akuukis Aug 31, 2025
a62d111
Merge pull request #134 from Akuukis/nordigen-days
tarioch Aug 31, 2025
4758e4f
feat: awardwallet
markferry Aug 27, 2025
add9dc7
awardwallet: fix value types and rename package
markferry Aug 27, 2025
9474fb4
awardwallet: separate user_history and account_history
markferry Sep 1, 2025
7e53ed8
awardwallet: docs
markferry Sep 1, 2025
72932e9
awardwallet: more tests
markferry Sep 1, 2025
283fa47
awardwallet: doc tweak
markferry Sep 2, 2025
b1c1c81
awardwallet-conf: keep get_link_url and generate, remove the rest
markferry Sep 2, 2025
ae0d9cf
awardwallet: now on pypi
markferry Sep 2, 2025
66502fd
Merge pull request #135 from markferry/awardwallet
tarioch Sep 2, 2025
513ac2f
use opencv-python-headless
tarioch Sep 6, 2025
587cab4
drop deprecated license classifier
tarioch Sep 6, 2025
3bde9cc
Merge pull request #136 from tarioch/chore/use_cv_headless
tarioch Sep 6, 2025
81abd38
awardwallet: slugify metadata, warn when no amount instead of asserting
markferry Sep 5, 2025
4356251
awardwallet .api moves to .client
markferry Sep 6, 2025
57d3dae
awardwallet: import balances
markferry Sep 8, 2025
56098eb
awardwallet: update docs
markferry Sep 9, 2025
8dd9dcf
Merge pull request #137 from markferry/awardwallet-v0.2
tarioch Sep 12, 2025
717b840
Improving radicant importer
tarioch Sep 12, 2025
bf98e52
Merge pull request #138 from tarioch/bugfix/radicant
tarioch Sep 12, 2025
177a4f9
truelayer: better balances
markferry Sep 20, 2025
18c309f
fix mypy
markferry Sep 21, 2025
b753e62
dedupe with transaction_id
markferry Sep 21, 2025
6c2d00a
add timedelta to balance date
markferry Sep 21, 2025
10919b8
truelayer: remove running_balance extraction
markferry Sep 21, 2025
c860627
Merge pull request #139 from markferry/truelayer-balances
tarioch Sep 21, 2025
4627e24
fix #83: postfinance dateutil.parser
markferry Sep 21, 2025
463858f
Merge pull request #140 from markferry/fix-83-postfinance-date-format
tarioch Sep 21, 2025
f577728
skip inline attachments without a filename
tarioch Oct 10, 2025
51c5eae
Merge pull request #143 from tarioch/bugfix/mail_importer_error
tarioch Oct 10, 2025
b3026d8
Improve ikbr symbol cleanup to also drop exchange addon (such as .L)
tarioch Dec 19, 2025
53837df
Merge pull request #145 from tarioch/feature/ibkr_standard_symbol
tarioch Dec 19, 2025
4116729
Switch to ruff for formatting and linting
tarioch Feb 15, 2026
3651a6c
Merge pull request #147 from tarioch/chore/use_ruff
tarioch Feb 15, 2026
793d486
drop not required isort cfg
tarioch Feb 15, 2026
6cd4e44
Switch to uv for building and publishing
tarioch Feb 16, 2026
7a4dbf6
Merge pull request #148 from tarioch/chore/switch_to_uv_drop_tox
tarioch Feb 16, 2026
5969b51
fixes for uv publish
tarioch Feb 16, 2026
e88fcf3
fixes for uv publish
tarioch Feb 16, 2026
5b2ee81
fixes for uv publish
tarioch Feb 16, 2026
e94789e
Bump pyasn1 from 0.6.2 to 0.6.3
dependabot[bot] Mar 17, 2026
d922bc3
Merge pull request #150 from tarioch/dependabot/uv/pyasn1-0.6.3
tarioch Mar 17, 2026
10eeadb
Bump requests from 2.32.5 to 2.33.0
dependabot[bot] Mar 26, 2026
26c5578
Merge pull request #151 from tarioch/dependabot/uv/requests-2.33.0
tarioch Mar 26, 2026
1c81d31
Bump cryptography from 46.0.5 to 46.0.6
dependabot[bot] Mar 29, 2026
1e7b844
Merge pull request #152 from tarioch/dependabot/uv/cryptography-46.0.6
tarioch Mar 29, 2026
9754919
Bump pygments from 2.19.2 to 2.20.0
dependabot[bot] Mar 30, 2026
e2bc0fe
Merge pull request #153 from tarioch/dependabot/uv/pygments-2.20.0
tarioch Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 0 additions & 28 deletions .coveragerc

This file was deleted.

35 changes: 16 additions & 19 deletions .github/workflows/build-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Publish Python 🐍 distributions 📦 to PyPI and TestPyPI
on:
push:
pull_request:
types: [opened, reopened]
release:
types: [published]
jobs:
Expand All @@ -12,34 +13,30 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: astral-sh/setup-uv@v7
- uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install tox
run: >-
pip install tox

- name: Install the project
run: uv sync --locked --dev

- name: Pre Commit
run: >-
tox -e pre-commit
run: uv run pre-commit run --all-files

- name: Test
run: >-
tox
run: uv run pytest

- name: Build
run: >-
tox -e build
run: uv build

- name: Publish distribution 📦 to Test PyPI
if: contains(github.ref, 'refs/heads/master')
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.test_pypi_password }}
TWINE_REPOSITORY_URL: https://test.pypi.org/legacy/
run: >-
tox -e publish
UV_PUBLISH_TOKEN: ${{ secrets.test_pypi_password }}
run: uv publish --index testpypi
- name: Publish distribution 📦 to PyPI
if: contains(github.ref, 'refs/tags/v')
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pypi_password }}
TWINE_REPOSITORY_URL: https://upload.pypi.org/legacy/
run: >-
tox -e publish -- --repository pypi
UV_PUBLISH_TOKEN: ${{ secrets.pypi_password }}
run: uv publish
3 changes: 0 additions & 3 deletions .isort.cfg

This file was deleted.

39 changes: 13 additions & 26 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ exclude: '^docs/conf.py'

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: check-added-large-files
Expand All @@ -17,30 +17,11 @@ repos:
- id: mixed-line-ending
args: ['--fix=auto'] # replace 'auto' with 'lf' to enforce Linux/Mac line endings or 'crlf' for Windows

- repo: https://github.com/pycqa/isort
rev: 5.13.2
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.1
hooks:
- id: isort

- repo: https://github.com/psf/black
rev: 23.12.1
hooks:
- id: black
language_version: python3

- repo: https://github.com/asottile/blacken-docs
rev: 1.16.0
hooks:
- id: blacken-docs
additional_dependencies: [black]

- repo: https://github.com/PyCQA/flake8
rev: 7.0.0
hooks:
- id: flake8
additional_dependencies: [flake8-print]
## You can add flake8 plugins via `additional_dependencies`:
# additional_dependencies: [flake8-bugbear]
- id: ruff-check
- id: ruff-format

- repo: https://github.com/Lucas-C/pre-commit-hooks-markup
rev: v1.0.1
Expand All @@ -49,7 +30,13 @@ repos:
files: README.rst

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
rev: v1.15.0
hooks:
- id: mypy
args: [--install-types, --non-interactive, --ignore-missing-imports]
args: [--install-types, --non-interactive, --ignore-missing-imports, --disallow-incomplete-defs]
# args: [--install-types, --non-interactive, --ignore-missing-imports, --disallow-untyped-defs]

- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.10.2
hooks:
- id: uv-lock
25 changes: 25 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Read the Docs configuration file for Sphinx projects
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

sphinx:
configuration: docs/conf.py

build:
os: ubuntu-24.04
apt_packages:
- bison
- flex
tools:
python: "3.14"
jobs:
pre_create_environment:
- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
create_environment:
- uv venv "${READTHEDOCS_VIRTUALENV_PATH}"
install:
- UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen --group docs
25 changes: 0 additions & 25 deletions .readthedocs.yml

This file was deleted.

1 change: 0 additions & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,5 +276,4 @@
python_version = ".".join(map(str, sys.version_info[0:2]))
intersphinx_mapping = {
"python": ("https://docs.python.org/" + python_version, None),
"pyscaffold": ("https://pyscaffold.org/en/stable", None),
}
112 changes: 106 additions & 6 deletions docs/importers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -170,19 +170,19 @@ TrueLayer account IDs to beancount accounts. e.g.:
If it is present, transactions for *only these accounts* will be imported.


Nordigen
--------
GoCardless (formerly Nordigen)
------------------------------

Import from `Nordigen <http://nordigen.com/>`__ using their api services. e.g. supports Revolut.
Import from `GoCardless <https://gocardless.com/bank-account-data/>`__ (formerly known as `Nordigen <https://gocardless.com/en-us/g/gc-nordigen/>`__) using their api services. Supports `2500+ banks <https://gocardless.com/bank-account-data/coverage/>`__ in Europe and the UK including e.g. Revolut.
You need to create a free account and create a token. I've included a small cli to allow to hook up
to different banks with nordigen. If you're country is not supported you can play around with other countries
to different banks with GoCardless. If you're country is not supported you can play around with other countries
e.g. CH is not allowed but things like revolut still work. You can also create multiple links and they will
all be listed in the end.

.. code-block:: console

nordigen-conf list_banks --secret_id YOURSECRET_ID --secret_key YOURSECRET_KEY --country DE
nordigen-conf create_link --secret_id YOURSECRET_ID --secret_key YOURSECRET_KEY --bank REVOLUT_REVOGB21 --reference myref
nordigen-conf create_link --secret_id YOURSECRET_ID --secret_key YOURSECRET_KEY --bank REVOLUT_REVOGB21 --reference myref --max_historical_days 90 --access_valid_for_days 90 --access_scope "[\"balances\", \"details\", \"transactions\"]"
nordigen-conf list_accounts --secret_id YOURSECRET_ID --secret_key YOURSECRET_KEY
nordigen-conf delete_link --secret_id YOURSECRET_ID --secret_key YOURSECRET_KEY --reference myref

Expand Down Expand Up @@ -402,10 +402,110 @@ Import mt940 from `BCGE <https://www.bcge.ch/>`__
Swisscard cards
---------------

Import Swisscard's `Cashback Cards <https://www.cashback-cards.ch/>` transactions from a CSV export.__
Import Swisscard's `Cashback Cards <https://www.cashback-cards.ch/>` transactions from a CSV export.

.. code-block:: python

from tariochbctools.importers.swisscard import importer as swisscard

CONFIG = [swisscard.SwisscardImporter("swisscard/.*\.csv", "Liabilities:Cashback")]

Fidelity Netbenefits
--------------------

Import Fidelity Netbenefits `<https://netbenefits.fidelity.com/>` transactions from a CSV export of the activities.

.. code-block:: python

from tariochbctools.importers.netbenefits import importer as netbenefits

CONFIG = [
netbenefits.Importer(
regexps="Transaction history\.csv",
cashAccount="Assets:Netbenefits:USD",
investmentAccount="Assets:Netbenefits:SYMBOL",
dividendAccount="Income:Interest",
taxAccount="Expenses:Tax",
capGainAccount="Income:Capitalgain",
symbol="SYMBOL",
ignoreTypes=["REINVESTMENT REINVEST @ $1.000"],
baseCcy="CHF",
)
]

radicant account statements
---------------------------

Import PDF from `radicant <https://radicant.com/>`__

.. code-block:: python

from tariochbctools.importers.radicant import importer as radicant

CONFIG = [radicant.Importer("Account.*\.pdf", "Assets:Radicant")]

AwardWallet
------------------------------

Import from `AwardWallet <https://awardwallet.com/>`__ using their `Account
Access API <https://awardwallet.com/api/account>`__.

As of 2025 AwardWallet integrates over 460 airline, hotel, shopping and other
loyalty programmes. Many programmes do not support retrieval of transactions,
only balances.

1. Update your personal AwardWallet account.
The importer can only retrieve data that has already been synced to your AwardWallet account.

2. Follow the instructions in the `API documentation
<https://awardwallet.com/api/account#introduction>`__ to register for a
free Business account and create an API key.

The API key is restricted to the **allowed IP addresses** you specify in
the Business interface API Settings.

3. Link and authorize personal accounts using the included ``awardwallet-conf``
CLI tool:

.. code-block:: console

awardwallet-conf --api-key YOUR_API_KEY get_link_url

Manage access to your personal account under `Manage Users
<https://awardwallet.com/user/connections>`__ in the personal web
interface.

4. Generate a config file for all linked users ending with
``awardwallet.yaml`` in your import location (e.g. download folder) and
edit it to your needs.

.. code-block:: console

awardwallet-conf --api-key YOUR_API_KEY generate > awardwallet.yaml

If you have multiple accounts using the same points currency (e.g. ``AVIOS``
used by BA, Iberia, ...) create sub-accounts for each so that ``balance``
directives will work.

Example configuration file:

.. code-block:: yaml

api_key: YOUR_API_KEY
users:
12345:
name: John Smith
all_history: false # only the last 10 txns per account
accounts:
7654321:
provider: "British Airways Club"
account: Assets:Current:Points
currency: AVIOS

5. Finally, initialize the importer:

.. code-block:: python

from tariochbctools.importers.awardwalletimp import importer as awimp

CONFIG = [awimp.Importer()]
3 changes: 0 additions & 3 deletions docs/requirements.txt

This file was deleted.

Loading