From 746df3b6d3b664160c635d3cc8a4c466335c3dd0 Mon Sep 17 00:00:00 2001 From: pylipp Date: Thu, 16 Dec 2021 19:03:56 +0100 Subject: [PATCH] Avoid crash when using plugin without `cli_options` attribute --- Changelog.md | 4 ++++ financeager/plugin.py | 7 ++++++- test/test_clients.py | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 0fa36a8..f296883 100644 --- a/Changelog.md +++ b/Changelog.md @@ -9,6 +9,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed ### Removed +## [v0.26.2.1] - 2021-12-16 +### Fixed +- Avoid crash in `cli._parse_command()` when using plugin without `cli_options` attribute. + ## [v0.26.2.0] - 2021-12-12 ### Added - Support extending `fina` CLI in plugins by providing a `plugin.PluginCliOptions` utility class. diff --git a/financeager/plugin.py b/financeager/plugin.py index 25861d2..80b9282 100644 --- a/financeager/plugin.py +++ b/financeager/plugin.py @@ -41,13 +41,18 @@ def extend(self, command_parser): """ +class DefaultPluginCliOptions(PluginCliOptions): + def extend(self, _): + pass + + class PluginBase: def __init__(self, *, name, config, cli_options=None): """Set plugin name, config (a PluginConfiguration instance), and optional CLI options (a PluginCliOptions instance).""" self.name = name self.config = config - self.cli_options = cli_options + self.cli_options = cli_options or DefaultPluginCliOptions() class ServicePlugin(PluginBase): diff --git a/test/test_clients.py b/test/test_clients.py index e1082d5..a103746 100644 --- a/test/test_clients.py +++ b/test/test_clients.py @@ -1,6 +1,6 @@ import unittest -from financeager import clients, config, plugin +from financeager import cli, clients, config, plugin from . import test_config @@ -34,6 +34,11 @@ def test_create(self): self.assertIsNone(client.sinks) self.assertIsInstance(client, TestClient) + # And running the CLI parser does not error + self.assertEqual( + cli._parse_command(["list"], plugins=[some_plugin])["command"], + "list") + if __name__ == "__main__": unittest.main()