Browse Source

added command line option `--poweroff-delay-seconds`

Fabian Peter Hammerle 3 years ago
parent
commit
c37762e0a5
3 changed files with 25 additions and 2 deletions
  1. 3 0
      CHANGELOG.md
  2. 5 2
      systemctl_mqtt/__init__.py
  3. 17 0
      tests/test_cli.py

+ 3 - 0
CHANGELOG.md

@@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 ## [Unreleased]
+### Added
+- command line option `--poweroff-delay-seconds` (default: 4 seconds)
+
 ### Changed
 - docker build stage: revert user after applying `chown` workaround for inter-stage copy
 

+ 5 - 2
systemctl_mqtt/__init__.py

@@ -199,7 +199,7 @@ class _State:
 class _MQTTAction(metaclass=abc.ABCMeta):
     @abc.abstractmethod
     def trigger(self, state: _State) -> None:
-        pass # pragma: no cover
+        pass  # pragma: no cover
 
     def mqtt_message_callback(
         self,
@@ -360,6 +360,9 @@ def _main() -> None:
         default=systemctl_mqtt._homeassistant.get_default_node_id(),
         help=" ",
     )
+    argparser.add_argument(
+        "--poweroff-delay-seconds", type=float, default=4.0, help=" ",
+    )
     args = argparser.parse_args()
     if args.mqtt_port:
         mqtt_port = args.mqtt_port
@@ -395,5 +398,5 @@ def _main() -> None:
         mqtt_topic_prefix=args.mqtt_topic_prefix,
         homeassistant_discovery_prefix=args.homeassistant_discovery_prefix,
         homeassistant_node_id=args.homeassistant_node_id,
-        poweroff_delay=datetime.timedelta(seconds=4),
+        poweroff_delay=datetime.timedelta(seconds=args.poweroff_delay_seconds),
     )

+ 17 - 0
tests/test_cli.py

@@ -277,3 +277,20 @@ def test__main_homeassistant_node_id_invalid(args):
     ):
         with pytest.raises(ValueError):
             systemctl_mqtt._main()
+
+
+@pytest.mark.parametrize(
+    ("args", "poweroff_delay"),
+    [
+        ([], datetime.timedelta(seconds=4)),
+        (["--poweroff-delay-seconds", "42.21"], datetime.timedelta(seconds=42.21)),
+        (["--poweroff-delay-seconds", "3600"], datetime.timedelta(hours=1)),
+    ],
+)
+def test__main_poweroff_delay(args, poweroff_delay):
+    with unittest.mock.patch("systemctl_mqtt._run") as run_mock, unittest.mock.patch(
+        "sys.argv", ["", "--mqtt-host", "mqtt-broker.local"] + args
+    ):
+        systemctl_mqtt._main()
+    assert run_mock.call_count == 1
+    assert run_mock.call_args[1]["poweroff_delay"] == poweroff_delay