All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Update dependencies
platformdirs,richandmarshmallow. (#283, #284, #287)
- Update dependencies
platformdirs,richandmarshmallow. (#278, #280)
- CLI-completion of available pockets for
migrate-pocketscommand.
- Enable support for different database types. If you initialize
Serveror a subclass in your code, you should pass thedatabase_typeparameter of the configuration. (#267) - Introduce Sqlite-based database back-end. Set
database_type = sqlitein theSERVICEsection of your configuration file to use it. The Sqlite back-end will become the default in v2.0 (to be released in Q3 2026). A warning is displayed to encourage users to migrate their databases and adjust the configuration file. (#271, #276) - Add
migrate-pocketscommand to enable conversion of existingtinydbdatabases into Sqlite. (#273)
- Update dependencies
richandmarshmallow. (#275)
- Enable suggestions for mistyped CLI commands and argument choices (only for Python 3.14 and newer).
- Update dependencies
platformdirs,argcomplete,richandmarshmallow. (#261, #264, #266)
- Support Python 3.14.
- Support for Python 3.9 is removed.
- Update dependencies
platformdirsandmarshmallow. (#256)
- Fix column alignment when using
listcommand with--stacked-layoutoption. (#253) - Add abstract
pocket.Pocketclass to facilitate using different database backends. (#252) - Update dependency
rich. (#251)
- Update dependencies
platformdirs,argcompleteandmarshmallow. (#247, #248, #249)
- Update dependencies
platformdirs,rich,argcompleteandmarshmallow. (#244, #245, #246)
- Update dependencies
argcompleteandmarshmallow. (#240, #241)
- CLI tab-completions for the
--pocketoption. - CLI tab-completions for the
--categoryoption. Completions are sourced from the categories of standard entries in the default ("main") pocket. Sourcing takes place at the first invocation of one of the commandsadd,update, orremove. Completion options are stored in the application's cache directory. (#233, #238)
- CLI tab-completions for
--table-nameand--frequencyoptions.
- Replace deprecated
appdirsdependency byplatformdirs. (#234) - Update dependencies
argcomplete,tinydb,rich,marshmallowandplatformdirs. (#235, #237)
- Support for Python 3.8 is removed.
- Update dependencies
richandmarshmallow. (#230, #232)
- Support Python 3.13.
- Update dependencies
argcompleteandmarshmallow. (#223, #226, #229)
- Replace usage of deprecated
pkg_resourcesmodule.
- Update dependencies
argcompleteandmarshmallow. (#218, #219)
- Update dependencies
rich,python-dateutil,argcompleteandmarshmallow. (#206, #209, #211, #212, #215)
- Update dependencies
argcompleteandmarshmallow. (#197, #203) - Update GitHub actions.
- Fix permission for GitHub release action.
- Use PyPI trusted publishing when uploading package.
- Update dependencies
argcompleteandrich. (#185, #187, #188, #191)
- Support Python 3.12.
- Update dependencies
rich,marshmallow, andargcomplete. (#171,#174,#175,#178,#181)
- Update dependencies
richandtinydb. (#169,#170)
- Update dependencies
richandargcomplete. (#161,#163)
- Support for Python 3.7 is removed.
- Update dependencies
richandtinydb. (#149,#150,#157)
- New
--jsonoption forlistcommand to return result in JSON format instead of formatted as table (#120). Helpful for processing data with jq or similar tools (refine selection with--filteroption):- all IDs of standard entries:
fina list --json | jq -r '.standard | keys[]' - all IDs of recurrent entries:
fina list --json | jq -r '.recurrent | keys[]' - all IDs of recurrent entries:
fina list --json --recurrent-only | jq .[].eid
- all IDs of standard entries:
- Update dependencies
richandmarshmallow. (#140,#142)
- Update GitHub actions to avoid deprecation warnings during CI runs. (#134)
- Officially support Python 3.11. (#133)
- Update dependency
rich. (#131)
- Make project entirely free from
setup.py(update localsetuptoolsandpip). (#127)
- Update dependency
marshmallow. (#124,#126) - Checks for dependency updates are run monthly instead of weekly.
- Use
pyproject.tomlinstead ofsetup.cfgfor project configuration. (#127)
- Update dependencies
richandmarshmallow. (#114,#117) - Update wording of debug logging message for clarity.
- Filtering for multiple patterns with
fina list, when one of the filters iscategory, now returns the correct selection instead of an empty result.
- Support for Python 3.6 is removed.
- Update dependencies
richandmarshmallow. (#104,#105,#106,#109,#111,#112)
- Update dependencies
richandmarshmallow. (#98,#99,#101,#102)
- Python 3.6 support will be removed in
financeagerv1.1.0.
- Update dependencies
richandtinydb. (#95,#97)
- Output short message when running
listcommand but no data found.
- Update dependency
rich. (#91)
- Avoid excessive empty space in table with
list --category-percentage.
- Filtering for recurrent entries with indefinite end is now supported (omit the filter value, as in
list -f end=). (#80) - Colorful and formatted output from the
listcommand via therichpackage is available.
- For filtering the output of the
listcommand, the-foption can now be specified multiple times with one argument each (previously, multiple arguments could be passed but when using-fmultiple times, the last occurrence would overrule the previous ones). The filters are combined. The long option is called--filter(singular). (#83) - If the
list -foption is used with a filter for frequency, start, or end, the-r/--recurrent-onlyoption is automatically added. (#83) - If the
updatecommand is used with the option--startand/or--end, it is assumed to operate on recurrent entries. (#84) - Update dependencies
argcompleteandtinydb. (#81,#85,#87) - Clarify command line help.
- Remove
convert-periods-to-pocketcommand. (#78)
- Avoid
Invalid configurationerror if default config file does not exist.
- Using the
listcommand with the--monthoption only returns entries of specified month in current year. (#79)
- Remove
financeagercommand line entry point (deprecated for one year, see v0.25.0.0) (#76)
- Prefix path for release notes in Github action.
- Update action for publishing Github release.
- Add
--recurrent-onlyoption forlistcommand. Filtering using-fand sorting using--entry-sortare supported. (#51) - Support updating
endfield for recurrent entries as unset (i.e. indicating no end). - Support updating
categoryfield for entries as unset (i.e. indicating unspecified category).
- Use
blackas code formatter.
- Remove support for Python 3.5 for good (broken since v0.26.1.0 anyways). (#59)
- The
convert-periods-to-pocketcommand will be removed in version1.0.0.
- Avoid crash in
cli._parse_command()when using plugin withoutcli_optionsattribute.
- Support extending
finaCLI in plugins by providing aplugin.PluginCliOptionsutility class.
- Add
-r/--recurrentoption as alias for-t recurrentfor several commands. (#68) - dependabot configuration for automated dependency updates.
- Officially support Python 3.10.
- Update dependencies
tinydb,python-dateutil, andargcomplete. - Use more modern package structure (
setup.cfgfile,buildfor building wheels). (#67)
- Data and config directories are now sensible for non-UNIX operating systems. XDG environment variables are respected. The dependency
appdirsis introduced (version 1.4.4) (#65)
- Application logs are now stored in an OS-specific cache directory (previously:
~/.local/share/financeager). - If the
--frequencyoption is used with theaddcommand, it is assumed that a recurrent entry shall be added. This avoids accidentally adding a standard entry when missing the--table-name recurrentoption. (#62) - In case of an error,
Server.runreturns the Exception object instead of an exception string. This allows for more fine-grained handling in downstream code built on theservermodule. (#49)
- The
nameandcategoryfields foraddorupdatecommands are validated at CLI level for being non-empty. This avoids passing invalid data to the backend which would result in a failing validation in thepocketsmodule. Trailing whitespace is stripped fromnameandcategoryfields.
- Specifying a date by format YY-MM-DD for a CLI option is correctly parsed.
- Support four-digit entry IDs (i.e. up to 9999).
- CI tests are now executed via Github actions instead of Travis.
- The release procedure is executed entirely via Github actions.
- The database structure underwent a major change. It is intended that a single database spans more than a year, and refers to a specific project. Please run the
convert-periods-to-pocketcommand to transfer existing data into the new format. The term 'period' is replaced by 'pocket'. Date fields are stored including the year. By default, recurrent entries last infinitely. (#52) - CLI date parsing is now executed by the
python-dateutilpackage instead of only supporting a single format. (#52) - The dependency
tinydbis updated to version 4.3.0. (#52) - The dependency
python-dateutilis updated to version 2.8.1. (#52)
- Preprocess
--start/--endCLI options foraddcommand. (#52)
- The
date_formatconfiguration option is removed. (#52) - Support for Python 3.5 is removed. The program might become incompatible with that version in an upcoming release.
- The main command
financeageris replaced by the shorter and more pleasantfina.
- The app is tested against Python 3.9.
- The 'none' value for the
SERVICE.nameconfiguration option is renamed to 'local'.
- Filtering by the 'value' field when using the
listcommand now works. (#58)
- As announced in v0.23.0.0, flask-webservice related functionality has been moved to a dedicated plugin, financeager-flask. If you were using the flask-webservice before, install the new package when updating financeager, at least on the client side. (#53)
- Configuration.get_option() returns converted option value if an option was assigned a type (int, float, boolean). Available option types are also used for validating configuration. PluginConfiguration.init_option_types() is added to enable option typing in plugins. (#56)
- The output of the 'list' command shows the difference of total earnings and expenses. (#29)
- The output of the 'list' command shows only category entries incl. their percentage share in total listing values when the '--category-percentage' option is specified. (#33)
- The output of the 'list' command shows only monthly entries with the '--month' option. Default value is the current month. (#55)
- Command line tab completion is provided by the argcomplete package. (#47)
- The PluginConfiguration.validate() method is not required to be implemented in derived classes anymore.
- Instead of having Configuration.get_option() return a section if no option was specified, a method get_section() is introduced.
- clients.Client() takes a mandatory keyword argument 'configuration'. (#57)
- 'marshmallow' is used for data validation instead of 'schematics'. (#48)
- The database structure will undergo a major change in version 0.25.0.0. Please follow the corresponding issue for more details and about how to migrate.
- The Configuration.getattr() method enabling 'magic' access of underlying ConfigParser methods.
- The SERVICE:FLASK timeout configuration option is now taken into account if specified in a configuration file.
- Non-error and non-debug program (standard) output is put to stdout instead of stderr. This enables proper redirecting of program output acc. to the norm of a UNIX tool.
- financeager log files are now properly rotated.
- financeager exits with a non-zero exit code if execution errored.
- When invoked without any arguments, financeager now shows usage info instead of a confusing exception traceback.
- Entries added on February 29th can be displayed as result of
listorget.
- Extensibility by plugins. The only group supported so far is 'financeager.services'. Related adjustments in the cli, clients, and config modules. A plugin module is added. (#53)
- New classes FlaskClient and LocalServerClient, as well as factory function create() in clients module.
- Test against Python 3.8 on Travis CI.
- Client.Out is renamed to Client.Sinks.
- The versioning scheme now adheres to '0.major.minor.patch' to correctly indicate impacts of new releases. (#54)
- The 'communication' module is renamed to 'clients'.
- Flask-webservice related functionality will be moved to a dedicated plugin. (#53)
- communication.module() and httprequests/localserver.proxy() functions.
- All available Periods are listed with the 'periods' command, even after restarting the webservice, or when using the 'localserver' variant. (#3)
- Extend Travis CI (use Python version 3.6 and 3.7, include style checks)
- Add gitlint tool for development.
- Provide version information using setuptools_scm. (#45)
- Send any HTTP request data in JSON format.
- Client-side communication interface is abstracted in the Client class.
- Various test framework enhancements.
- [Incompatible] The URL endpoint for copying entries is changed from /periods/copy to /copy. (#32)
- [Incompatible] The
listcommand has been renamed toperiods. (#38) - [Incompatible] The
printcommand has been renamed tolist. (#38) - [Incompatible] The
rmcommand has been renamed toremove. (#40)
test.suitesmodule andtest.test_*.suitefunctions in order to simplify test framework. Testing now invokesunittestdiscovery in an expected way.test.test_communicationmodule because it contained redundant tests.
list --stacked-layoutdisplays total values of earnings and expenses (analogous to the output of barelist). (#35)- Database files are properly closed after test runs involving a Flask app. (#42)
- Changelog file and related tooling.