- The expected `hledger` output format appears to have changed, likely
from a recent `hledger` release (confirmed to be unrelated to `xan`).
- This bug does *not* affect individual year tax report generation, when
given a specific (or default) year.
- Adds Pluggable auto-(un)load support
- Adds plugin dispatcher for interpreter
- Refactors to support new Pluggable system
- Updates usage help and improves documentation
The base path is now *outside* of the macro directory; allowing for a
more integrated view of `dfi`'s entire `root` system. This is more
apparent once running an interactive session where the expectation is
(more intuitively) that any path should be relative to 'src/root' and
not 'src/root/macro'.
The rationale for why this was in 'src/root/macro' to begin with stems
from how `root` (by default) will automatically load rootlogon.C in the
directory that `root` is started. This is causing more confusion than
not because `dfi`'s usage of `root` is not limited to macros.
These changes skirt the line between needing a major API bump and not
but, so far, appears to be on the side of *not*. However, the TODOs
noted for macro loading should be addressed prior to any API changes.
`xsv` is no longer maintained and the author recommends `xan` instead.
Fortunately, `xan` is very suitable for our use-case; is very efficient,
and produces no differences in our expected output.
- Clarify usage, add examples, note plugin support type
* finance's `plugins` only supports shell-based plugins
- To use `root` plugins, use `root` command (see `root help`)
- dfi's `root` now supports shell loading (and running) of
macros/plugins:
* An interactive ROOT.cern instance is no longer *always* needed:
- For macros (non-server); a 'one-off' instance will start, load the
given macro, run the macro and then the instance will exit.
* Server(s) will maintain an interactive instance.
- For plugins; an interactive instance will start, load the given
plugin, and then leave the user to make their calls manually.
* All repo macros and repo/custom plugins are available.
- By default, an interactive instance will start when no dfi `root`
arguments are given.
See `root help` for details.
- Refactors locations for internal `fetch` impl and deps (composer)
* A softer hardcoding without the need for a new autoloader
* A restructured solution to silence the linter (phpstan)
NOTE: variables are prepended with *_PHP_* as to not bring confusion
with any other `dfi` dependencies or the `dfi` `root` module (C++).
- Implements support for unified API via Etherscan V2 (ethereum-based)
* All ethereum-based L2s are now accessed via single API endpoint
- Chains are now available via chain ID
* Updates API key requirement for `fetch` ethereum-based subaccounts
- The API key's value must now be prepended with "etherscan"
* Previously was prepended per-chain ("ethereum" or "polygon")
- The API key is now *required* (can be generated at etherscan.io)
* Resolves fatal error in Etherscan::parse_response()
* Impl will now handle if:
- Config's API key/value is malformed
- Etherscan API key was not given
- Etherscan response is fatal
- Adds support for more L2s
* Arbitrum (One)
* Optimism
* Base
- Adds more L2s to existing accounts
* Coinbase Wallet
* Ledger Live
* MetaMask
- Updates documentation
* Update default generated `fetch` config
* Update `fetch` usage help
* Update README
The container environment's $DOCKER_FINANCE_CONTAINER_CONF is
bind-mounted and, by default, points to ~/.config/docker-finance.d
The parent dir (~/.config) is subsequently owned by root (Docker-ism).
Ergo, with visidata v3.2, visidata cannot create its default dir:
"PermissionError: [Errno 13] Permission denied: for visidata config"
This commit fixes that by setting visidata's default dir to use the
calling profile's docker-finance.d (where profile customization occurs).
Also included is some related refactoring.
- Will now only parse given year (or 'all', if given).
* No longer parses all subsequent years after given year
(unless 'all' is given).
- Now prints most recent daily average for given year instead of most
recent daily average for current year.
- When applicable, as the stream progresses, exit each successive gawk
iteration when no applicable records are present (no taxable events
found for the given tag in the given year).
Previously, when no records were found, a reports file was produced
with either a single header-only row or junk data that resulted from
the assumption there would be real data.
A preexisting hack prevented the junk data from being written after
production but this commit will resolve that hack by preventing the
printing of junk data while also preventing the production of a
header-only file.
- Print warnings when no taxable events are found for the given year.
- Add checks:
* Only verify patched files if the patched files are not empty.
* Empty variable checks.
- Don't break before advancing 'starting_after' cursor
* Only save given year instead of breaking when not given year
- The 'next_starting_after' cursor now exists within 'info' object
- Creates per-wallet / per-account compliance for IRS Rev. Proc. 2024-28
* Obfuscated keymap now creates a unique indentifier per-wallet /
per-account where all trades, spends and income are now clearly
tied to their respective wallets / accounts.
- Removes support for anonymized ("universal pool") reports.
- Re-enables space after completion for plugin arguments
- Ignores internal/implementation files when completing
* Files must be within an 'internal'/'impl' directory