All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- CLI tab-completions for the
--pocket
option. - CLI tab-completions for the
--category
option. 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-name
and--frequency
options.
- Replace deprecated
appdirs
dependency byplatformdirs
. (#234) - Update dependencies
argcomplete
,tinydb
,rich
,marshmallow
andplatformdirs
. (#235, #237)
- Support for Python 3.8 is removed.
- Update dependencies
rich
andmarshmallow
. (#230, #232)
- Support Python 3.13.
- Update dependencies
argcomplete
andmarshmallow
. (#223, #226, #229)
- Replace usage of deprecated
pkg_resources
module.
- Update dependencies
argcomplete
andmarshmallow
. (#218, #219)
- Update dependencies
rich
,python-dateutil
,argcomplete
andmarshmallow
. (#206, #209, #211, #212, #215)
- Update dependencies
argcomplete
andmarshmallow
. (#197, #203) - Update GitHub actions.
- Fix permission for GitHub release action.
- Use PyPI trusted publishing when uploading package.
- Update dependencies
argcomplete
andrich
. (#185, #187, #188, #191)
- Support Python 3.12.
- Update dependencies
rich
,marshmallow
, andargcomplete
. (#171,#174,#175,#178,#181)
- Update dependencies
rich
andtinydb
. (#169,#170)
- Update dependencies
rich
andargcomplete
. (#161,#163)
- Support for Python 3.7 is removed.
- Update dependencies
rich
andtinydb
. (#149,#150,#157)
- New
--json
option forlist
command to return result in JSON format instead of formatted as table (#120). Helpful for processing data with jq or similar tools (refine selection with--filter
option):- 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
rich
andmarshmallow
. (#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 localsetuptools
andpip
). (#127)
- Update dependency
marshmallow
. (#124,#126) - Checks for dependency updates are run monthly instead of weekly.
- Use
pyproject.toml
instead ofsetup.cfg
for project configuration. (#127)
- Update dependencies
rich
andmarshmallow
. (#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
rich
andmarshmallow
. (#104,#105,#106,#109,#111,#112)
- Update dependencies
rich
andmarshmallow
. (#98,#99,#101,#102)
- Python 3.6 support will be removed in
financeager
v1.1.0.
- Update dependencies
rich
andtinydb
. (#95,#97)
- Output short message when running
list
command 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
list
command via therich
package is available.
- For filtering the output of the
list
command, the-f
option can now be specified multiple times with one argument each (previously, multiple arguments could be passed but when using-f
multiple times, the last occurrence would overrule the previous ones). The filters are combined. The long option is called--filter
(singular). (#83) - If the
list -f
option is used with a filter for frequency, start, or end, the-r/--recurrent-only
option is automatically added. (#83) - If the
update
command is used with the option--start
and/or--end
, it is assumed to operate on recurrent entries. (#84) - Update dependencies
argcomplete
andtinydb
. (#81,#85,#87) - Clarify command line help.
- Remove
convert-periods-to-pocket
command. (#78)
- Avoid
Invalid configuration
error if default config file does not exist.
- Using the
list
command with the--month
option only returns entries of specified month in current year. (#79)
- Remove
financeager
command 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-only
option forlist
command. Filtering using-f
and sorting using--entry-sort
are supported. (#51) - Support updating
end
field for recurrent entries as unset (i.e. indicating no end). - Support updating
category
field for entries as unset (i.e. indicating unspecified category).
- Use
black
as code formatter.
- Remove support for Python 3.5 for good (broken since v0.26.1.0 anyways). (#59)
- The
convert-periods-to-pocket
command will be removed in version1.0.0
.
- Avoid crash in
cli._parse_command()
when using plugin withoutcli_options
attribute.
- Support extending
fina
CLI in plugins by providing aplugin.PluginCliOptions
utility class.
- Add
-r
/--recurrent
option as alias for-t recurrent
for 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.cfg
file,build
for building wheels). (#67)
- Data and config directories are now sensible for non-UNIX operating systems. XDG environment variables are respected. The dependency
appdirs
is introduced (version 1.4.4) (#65)
- Application logs are now stored in an OS-specific cache directory (previously:
~/.local/share/financeager
). - If the
--frequency
option is used with theadd
command, it is assumed that a recurrent entry shall be added. This avoids accidentally adding a standard entry when missing the--table-name recurrent
option. (#62) - In case of an error,
Server.run
returns the Exception object instead of an exception string. This allows for more fine-grained handling in downstream code built on theserver
module. (#49)
- The
name
andcategory
fields foradd
orupdate
commands 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 thepockets
module. Trailing whitespace is stripped fromname
andcategory
fields.
- 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-pocket
command 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-dateutil
package instead of only supporting a single format. (#52) - The dependency
tinydb
is updated to version 4.3.0. (#52) - The dependency
python-dateutil
is updated to version 2.8.1. (#52)
- Preprocess
--start
/--end
CLI options foradd
command. (#52)
- The
date_format
configuration 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
financeager
is replaced by the shorter and more pleasantfina
.
- The app is tested against Python 3.9.
- The 'none' value for the
SERVICE.name
configuration option is renamed to 'local'.
- Filtering by the 'value' field when using the
list
command 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
list
orget
.
- 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
list
command has been renamed toperiods
. (#38) - [Incompatible] The
print
command has been renamed tolist
. (#38) - [Incompatible] The
rm
command has been renamed toremove
. (#40)
test.suites
module andtest.test_*.suite
functions in order to simplify test framework. Testing now invokesunittest
discovery in an expected way.test.test_communication
module because it contained redundant tests.
list --stacked-layout
displays 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.