Repository: migros/fotoobo (language: python)

Issue:
Bump jinja2 from 3.1.2 to 3.1.3
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/pallets/jinja/releases">jinja2's releases</a>.</em></p>
<blockquote>
<h2>3.1.3</h2>
<p>This is a fix release for the 3.1.x feature branch.</p>
<ul>
<li>Fix for <a href="https://github.com/pallets/jinja/security/advisories/GHSA-h5c8-rqwp-cp95">GHSA-h5c8-rqwp-cp95</a>. You are affected if you are using <code>xmlattr</code> and passing user input as attribute keys.</li>
<li>Changes: <a href="https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-3">https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-3</a></li>
<li>Milestone: <a href="https://github.com/pallets/jinja/milestone/15?closed=1">https://github.com/pallets/jinja/milestone/15?closed=1</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.3</h2>
<p>Released 2024-01-10</p>
<ul>
<li>Fix compiler error when checking if required blocks in parent templates are
empty. :pr:<code>1858</code></li>
<li><code>xmlattr</code> filter does not allow keys with spaces. GHSA-h5c8-rqwp-cp95</li>
<li>Make error messages stemming from invalid nesting of <code>{% trans %}</code> blocks
more helpful. :pr:<code>1918</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pallets/jinja/commit/d9de4bb215fd1cc8092a410fb834c7c4060b1fc1"><code>d9de4bb</code></a> release version 3.1.3</li>
<li><a href="https://github.com/pallets/jinja/commit/50124e16561f17f6c1ec85a692f6551418971cdc"><code>50124e1</code></a> skip test pypi</li>
<li><a href="https://github.com/pallets/jinja/commit/9ea7222ef3f184480be0d0884e30ccfb4172b17b"><code>9ea7222</code></a> use trusted publishing</li>
<li><a href="https://github.com/pallets/jinja/commit/da703f7aae36b1e88baaa20de334d7ff6378fdde"><code>da703f7</code></a> use trusted publishing</li>
<li><a href="https://github.com/pallets/jinja/commit/bce174692547464512383ec40e0f8338b8811983"><code>bce1746</code></a> use trusted publishing</li>
<li><a href="https://github.com/pallets/jinja/commit/7277d8068be593deab3555c7c14f974ada373af1"><code>7277d80</code></a> update pre-commit hooks</li>
<li><a href="https://github.com/pallets/jinja/commit/5c8a10522421270f66376a24ec8e0d6812bc4b14"><code>5c8a105</code></a> Make nested-trans-block exceptions nicer (<a href="https://redirect.github.com/pallets/jinja/issues/1918">#1918</a>)</li>
<li><a href="https://github.com/pallets/jinja/commit/19a55db3b411343309f2faaffaedbb089e841895"><code>19a55db</code></a> Make nested-trans-block exceptions nicer</li>
<li><a href="https://github.com/pallets/jinja/commit/716795349a41d4983a9a4771f7d883c96ea17be7"><code>7167953</code></a> Merge pull request from GHSA-h5c8-rqwp-cp95</li>
<li><a href="https://github.com/pallets/jinja/commit/7dd3680e6eea0d77fde024763657aa4d884ddb23"><code>7dd3680</code></a> xmlattr filter disallows keys with spaces</li>
<li>Additional commits viewable in <a href="https://github.com/pallets/jinja/compare/3.1.2...3.1.3">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.2&new-version=3.1.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/migros/fotoobo/network/alerts).

</details>


Discussion / hints:

Fix patch:
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 945a940..161b638 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -21,7 +21,7 @@ imagesize==1.4.1 ; python_version >= "3.8" and python_version < "3.13"
 importlib-metadata==6.8.0 ; python_version >= "3.8" and python_version < "3.10"
 iniconfig==2.0.0 ; python_full_version >= "3.8.0" and python_version < "3.13"
 isort==5.10.1 ; python_full_version >= "3.8.0" and python_version < "3.13"
-jinja2==3.1.2 ; python_version >= "3.8" and python_version < "3.13"
+jinja2==3.1.3 ; python_version >= "3.8" and python_version < "3.13"
 lazy-object-proxy==1.9.0 ; python_full_version >= "3.8.0" and python_version < "3.13"
 markupsafe==2.1.3 ; python_version >= "3.8" and python_version < "3.13"
 mccabe==0.7.0 ; python_full_version >= "3.8.0" and python_version < "3.13"
diff --git a/fotoobo/cli/convert.py b/fotoobo/cli/convert.py
index 0889726..4dcfe62 100644
--- a/fotoobo/cli/convert.py
+++ b/fotoobo/cli/convert.py
@@ -20,10 +20,10 @@ def callback(context: typer.Context) -> None:
     The fotoobo convert command callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command(no_args_is_help=True)
@@ -60,7 +60,5 @@ def checkpoint(
     https://fotoobo.readthedocs.io/en/latest/usage/convert.html for more information.
     """
     checkpoint_assets = load_json_file(infile)
-
     result = convert.checkpoint(checkpoint_assets, obj_type, outfile.name, cache_dir)
-
     save_json_file(outfile, result.get_result("fortinet_assets"))
diff --git a/fotoobo/cli/ems/get_commands.py b/fotoobo/cli/ems/get_commands.py
index c5c8971..7b215ba 100644
--- a/fotoobo/cli/ems/get_commands.py
+++ b/fotoobo/cli/ems/get_commands.py
@@ -18,10 +18,10 @@ def callback(context: typer.Context) -> None:
     The ems get subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
diff --git a/fotoobo/cli/ems/main.py b/fotoobo/cli/ems/main.py
index 78b0407..9894214 100644
--- a/fotoobo/cli/ems/main.py
+++ b/fotoobo/cli/ems/main.py
@@ -19,10 +19,10 @@ def callback(context: typer.Context) -> None:
     The ems subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 app.add_typer(get.app, name="get", help="FortiClient EMS get commands.")
diff --git a/fotoobo/cli/ems/monitor_commands.py b/fotoobo/cli/ems/monitor_commands.py
index 1aa71e0..5044dc1 100644
--- a/fotoobo/cli/ems/monitor_commands.py
+++ b/fotoobo/cli/ems/monitor_commands.py
@@ -1,10 +1,9 @@
 """
 The FortiClient EMS monitor commands
 """
-
 import logging
 from pathlib import Path
-from typing import Union
+from typing import Optional, Union
 
 import typer
 
@@ -34,10 +33,10 @@ def callback(context: typer.Context) -> None:
     The ems get subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command(help="Monitor the FortiClient EMS connections.\n\n" + HELP_TEXT_TEMPLATE)
@@ -55,7 +54,7 @@ def connections(
         metavar="[output]",
     ),
     raw: bool = typer.Option(False, "-r", "--raw", help="Output raw data."),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -67,14 +66,13 @@ def connections(
     Monitor the FortiClient EMS connections.
     """
     result = monitor.connections(host)
-
     data = result.get_result(host)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
-            log.debug("template_file is: %s", template_file)
+            log.debug("template_file is: '%s'", template_file)
             result.save_with_template(host, template_file, output_file)
 
         else:
@@ -120,7 +118,7 @@ def endpoint_management_status(
         metavar="[output]",
     ),
     raw: bool = typer.Option(False, "-r", "--raw", help="Output raw data."),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -132,11 +130,10 @@ def endpoint_management_status(
     Monitor the endpoint management status in FortiClient EMS.
     """
     result = monitor.endpoint_management_status(host)
-
     data = result.get_result(host)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
             result.save_with_template(host, template_file, output_file)
@@ -179,7 +176,7 @@ def endpoint_os_versions(
         metavar="[output]",
     ),
     raw: bool = typer.Option(False, "-r", "--raw", help="Output raw data."),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -191,11 +188,10 @@ def endpoint_os_versions(
     Monitor the endpoint os versions in FortiClient EMS.
     """
     result = monitor.endpoint_os_versions(host)
-
     data = result.get_result(host)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
             result.save_with_template(host, template_file, output_file)
@@ -221,6 +217,7 @@ def endpoint_os_versions(
             totals = []
             for _os, count in result.get_result(host)["fotoobo"].items():
                 totals.append({"os": _os[10:], "count": count})
+
             result.print_table_raw(totals, ["OS", "Total"], title="Summary")
 
 
@@ -242,7 +239,7 @@ def endpoint_outofsync(
         metavar="[output]",
     ),
     raw: bool = typer.Option(False, "-r", "--raw", help="Output raw data."),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -257,7 +254,7 @@ def endpoint_outofsync(
     data = result.get_result(host)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
             result.save_with_template(host, template_file, output_file)
@@ -294,7 +291,7 @@ def license(  # pylint: disable=redefined-builtin
         metavar="[output]",
     ),
     raw: bool = typer.Option(False, "-r", "--raw", help="Output raw data."),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -309,7 +306,7 @@ def license(  # pylint: disable=redefined-builtin
     data = result.get_result(host)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
             result.save_with_template(host, template_file, output_file)
@@ -322,10 +319,12 @@ def license(  # pylint: disable=redefined-builtin
         # if no output file is given just pretty print the output to the console
         if raw:
             result.print_raw()
+
         else:
             licenses = []
             for key, value in result.get_result(host)["data"].items():
                 licenses.append({"key": key, "value": value})
+
             result.print_table_raw(
                 licenses, ["Key", "Value"], title="FortiClient EMS license information"
             )
@@ -333,6 +332,7 @@ def license(  # pylint: disable=redefined-builtin
             licenses = []
             for key, value in result.get_result(host)["fotoobo"].items():
                 licenses.append({"key": key, "value": value})
+
             result.print_table_raw(
                 licenses, ["Key", "Value"], title="FortiClient EMS license summary"
             )
@@ -358,7 +358,6 @@ def system(
 
     else:
         _ = data.pop("license", {})  # pop "license" key as ist is not used (it's another command)
-
         result.print_table_raw(
             [
                 {"key": "hostname", "hostname": data["name"]},
diff --git a/fotoobo/cli/faz/get_commands.py b/fotoobo/cli/faz/get_commands.py
index 02e2c52..8b93dce 100644
--- a/fotoobo/cli/faz/get_commands.py
+++ b/fotoobo/cli/faz/get_commands.py
@@ -18,10 +18,10 @@ def callback(context: typer.Context) -> None:
     The faz get subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
diff --git a/fotoobo/cli/faz/main.py b/fotoobo/cli/faz/main.py
index f274d23..0369966 100644
--- a/fotoobo/cli/faz/main.py
+++ b/fotoobo/cli/faz/main.py
@@ -18,10 +18,10 @@ def callback(context: typer.Context) -> None:
     The faz subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 app.add_typer(get.app, name="get", help="FortiAnalyzer get commands.")
diff --git a/fotoobo/cli/fgt/config_commands.py b/fotoobo/cli/fgt/config_commands.py
index 09779d8..6da2b12 100644
--- a/fotoobo/cli/fgt/config_commands.py
+++ b/fotoobo/cli/fgt/config_commands.py
@@ -31,7 +31,6 @@ def check(
     Check one or more FortiGate configuration files.
     """
     result = fgt.config.check(configuration, bundles)
-
     result.print_messages()
 
 
@@ -72,7 +71,6 @@ def info(
 
     if as_list:
         info_dicts = []
-
         for _, _info in result.all_results().items():
             info_dicts.append(_info.__dict__)
 
diff --git a/fotoobo/cli/fgt/get_commands.py b/fotoobo/cli/fgt/get_commands.py
index e878466..9619d00 100644
--- a/fotoobo/cli/fgt/get_commands.py
+++ b/fotoobo/cli/fgt/get_commands.py
@@ -2,7 +2,6 @@
 The FortiGate get commands
 """
 # pylint: disable=anomalous-backslash-in-string
-
 import logging
 
 import typer
@@ -20,10 +19,10 @@ def callback(context: typer.Context) -> None:
     The fgt get subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
diff --git a/fotoobo/cli/fgt/main.py b/fotoobo/cli/fgt/main.py
index 7f19d1b..0e97b92 100644
--- a/fotoobo/cli/fgt/main.py
+++ b/fotoobo/cli/fgt/main.py
@@ -9,14 +9,14 @@
 import typer
 
 from fotoobo import tools
-from fotoobo.cli.fgt import monitor_commands as monitor
 from fotoobo.cli.fgt import config_commands as config
 from fotoobo.cli.fgt import get_commands as get
+from fotoobo.cli.fgt import monitor_commands as monitor
 from fotoobo.exceptions import GeneralWarning
 from fotoobo.helpers import cli_path
+from fotoobo.helpers.config import config as fotoobo_config
 from fotoobo.helpers.files import create_dir, file_to_ftp, file_to_zip
 from fotoobo.inventory import Inventory
-from fotoobo.helpers.config import config as fotoobo_config
 
 app = typer.Typer(no_args_is_help=True, rich_markup_mode="rich")
 log = logging.getLogger("fotoobo")
@@ -28,10 +28,10 @@ def callback(context: typer.Context) -> None:
     The fgt subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 app.add_typer(get.app, name="get", help="FortiGate get commands.")
@@ -80,7 +80,6 @@ def backup(
         backup_dir = Path.cwd()
 
     create_dir(backup_dir)
-
     result = tools.fgt.backup(host)
 
     for name, data in result.all_results().items():
@@ -98,17 +97,16 @@ def backup(
         if ftp_server:
             if ftp_server in inventory.assets:
                 server = inventory.assets[ftp_server]
-                log.debug("compressing configuration '%s'", name)
+                log.debug("Compressing configuration '%s'", name)
                 time: str = datetime.now().strftime("%Y%m%d-%H%M")
                 zip_file = backup_dir / Path(name + "-" + time + ".conf.zip")
                 file_to_zip(config_file, zip_file)
                 file_to_ftp(zip_file, server)
                 os.remove(zip_file)
-
                 result.push_message(name, f"Uploaded config file for '{name}' to '{ftp_server}'")
 
             else:
-                raise GeneralWarning(f"ftp server '{ftp_server}' not found in inventory")
+                raise GeneralWarning(f"FTP server '{ftp_server}' not found in inventory")
 
     if smtp_server and smtp_server in inventory.assets:
         result.send_messages_as_mail(inventory.assets[smtp_server], "error")
diff --git a/fotoobo/cli/fgt/monitor_commands.py b/fotoobo/cli/fgt/monitor_commands.py
index 5d6c546..b5bc5c0 100644
--- a/fotoobo/cli/fgt/monitor_commands.py
+++ b/fotoobo/cli/fgt/monitor_commands.py
@@ -1,11 +1,9 @@
 """
 The FortiGate check commands
 """
-# pylint: disable=anomalous-backslash-in-string
-
 import logging
 from pathlib import Path
-from typing import Dict, Union
+from typing import Dict, Optional
 
 import typer
 from rich.pretty import pprint
@@ -36,10 +34,10 @@ def callback(context: typer.Context) -> None:
     The fgt check subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
@@ -49,7 +47,7 @@ def hamaster(
         help="The FortiManager hostname to access (must be defined in the inventory).",
         metavar="[host]",
     ),
-    output_file: Union[None, Path] = typer.Option(
+    output_file: Optional[Path] = typer.Option(
         None,
         "--output",
         "-o",
@@ -64,7 +62,7 @@ def hamaster(
         metavar="[server]",
         show_default=False,
     ),
-    template_file: Union[None, Path] = typer.Option(
+    template_file: Optional[Path] = typer.Option(
         None,
         "--template",
         "-t",
@@ -79,7 +77,7 @@ def hamaster(
     FortiManager to access. The command searches for all FortiGate clusters in the FortiManager
     and checks if the designated primary node really is the HA master node.
 
-    The optional argument \[host] makes this command somewhat magic. If you omit \[host] it searches
+    The optional argument 'host' makes this command somewhat magic. If you omit 'host' it searches
     for all devices in the default FortiManager (fmg) in the inventory.
     """
     inventory = Inventory(config.inventory_file)
@@ -96,13 +94,13 @@ def hamaster(
             )
 
         else:
-            log.warning("SMTP server %s not in found in inventory.", smtp_server)
+            log.warning("SMTP server '%s' not in found in inventory.", smtp_server)
 
     if output_file:
-        log.debug("output_file is: %s", output_file)
+        log.debug("output_file is: '%s'", output_file)
 
         if template_file:
-            log.debug("template_file is: %s", template_file)
+            log.debug("template_file is: '%s'", template_file)
             output: Result[Dict[str, Dict[str, str]]] = Result()
             output.push_result("_hamaster", data)
             output.save_with_template("_hamaster", template_file, output_file)
diff --git a/fotoobo/cli/fmg/get_commands.py b/fotoobo/cli/fmg/get_commands.py
index e209c46..3606e7b 100644
--- a/fotoobo/cli/fmg/get_commands.py
+++ b/fotoobo/cli/fmg/get_commands.py
@@ -24,10 +24,10 @@ def callback(context: typer.Context) -> None:
     The fmg get subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
@@ -58,7 +58,7 @@ def devices(
     Get the FortiManager devices list.
 
     In case of a cluster the 'Device Name' is the name of the cluster and the 'HA Nodes' holds the
-    hostnames of the actuall cluser nodes.
+    hostnames of the actual cluster nodes.
     """
     result = fmg.get.devices(host)
     if raw:
diff --git a/fotoobo/cli/fmg/main.py b/fotoobo/cli/fmg/main.py
index acb96d8..976f55e 100644
--- a/fotoobo/cli/fmg/main.py
+++ b/fotoobo/cli/fmg/main.py
@@ -22,19 +22,18 @@ def callback(context: typer.Context) -> None:
     The fmg subcommand callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command(no_args_is_help=True)
 def assign(
     adoms: str = typer.Argument(
         ...,
-        help="The ADOMs to assign the global policy/objects to. Use "
-        "'fotoobo fmg get adoms' to get a list of "
-        "available ADOMs. Separate multiple ADOMs by comma (no spaces).",
+        help="The ADOMs to assign the global policy/objects to. Use 'fotoobo fmg get adoms' to "
+        "get a list of available ADOMs. Separate multiple ADOMs by comma (no spaces).",
         metavar="[adoms]",
         show_default=False,
     ),
@@ -73,8 +72,9 @@ def assign(
     if smtp_server:
         if smtp_server in inventory.assets:
             result.send_messages_as_mail(inventory.assets[smtp_server], "error")
+
         else:
-            log.warning("SMTP server %s not in found in inventory.", smtp_server)
+            log.warning("SMTP server '%s' not in found in inventory.", smtp_server)
 
 
 @app.command(no_args_is_help=True)
@@ -109,8 +109,9 @@ def post(
     if smtp_server:
         if smtp_server in inventory.assets:
             result.send_messages_as_mail(inventory.assets[smtp_server], "error", command=True)
+
         else:
-            log.warning("SMTP server %s not in found in inventory.", smtp_server)
+            log.warning("SMTP server '%s' not in found in inventory.", smtp_server)
 
 
 app.add_typer(get.app, name="get", help="FortiManager get commands.")
diff --git a/fotoobo/cli/get.py b/fotoobo/cli/get.py
index 5998b69..7edfa9f 100644
--- a/fotoobo/cli/get.py
+++ b/fotoobo/cli/get.py
@@ -20,10 +20,10 @@ def callback(context: typer.Context) -> None:
     The fotoobo get command callback
 
     Args:
-        context (Context): the context object of the typer app
+        context: The context object of the typer app
     """
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
 
 
 @app.command()
@@ -32,7 +32,6 @@ def inventory() -> None:
     Print a summary over your fotoobo inventory.
     """
     result = get.inventory()
-
     result.print_result_as_table(title="fotoobo inventory", headers=["Device", "Hostname", "Type"])
 
 
@@ -54,7 +53,6 @@ def version(
                 "version": f"[bold]{result.get_result('version')[0]['version']}[/]",
             }
         ]
-
         out_list += result.get_result("version")[1:]
 
     else:
@@ -70,7 +68,6 @@ def commands() -> None:
     """
     result = get.commands()
     tree = result.get_result("commands")
-
     rich_print(
         Panel(tree, border_style="#FF33BB", title="cli commands structure", title_align="right")
     )
diff --git a/fotoobo/cli/main.py b/fotoobo/cli/main.py
index 024dbff..c19ea22 100644
--- a/fotoobo/cli/main.py
+++ b/fotoobo/cli/main.py
@@ -7,12 +7,11 @@
 Caution: Use docstrings with care as they are used to print help texts on any command.
 """
 # pylint: disable=anomalous-backslash-in-string
-
 import logging
 import os
 import sys
 from pathlib import Path
-from typing import Optional, Union
+from typing import Optional
 
 import typer
 
@@ -48,7 +47,7 @@ def version_callback(value: bool) -> None:
 @app.callback()
 def callback(  # pylint: disable=too-many-arguments
     context: typer.Context,
-    config_file: Union[Path, None] = typer.Option(
+    config_file: Optional[Path] = typer.Option(
         None,
         "--config",
         "-c",
@@ -92,10 +91,10 @@ def callback(  # pylint: disable=too-many-arguments
     if not config.no_logo:
         print_logo()
 
-    log.debug("let the magic begin")
+    log.debug("Let the magic begin")
 
     # Log all the configuration options
-    # If a config option is a datastructure (dict) unpack it and write it linewise
+    # If a config option is a data-structure (dict) unpack it and write it line-by-line
     # For security reasons all sensitive values are shortened
     for attr in dir(config):
         if attr.startswith("_") or attr in ["config", "load_configuration"]:
@@ -106,13 +105,14 @@ def callback(  # pylint: disable=too-many-arguments
                 if attr == "vault" and sub_attr in ["role_id", "secret_id"]:
                     value = f"{value[:4]}...{value[-5:-1]}"
 
-                log.debug("option '%s.%s' is '%s'", attr, sub_attr, value)
+                log.debug("Option '%s.%s' is '%s'", attr, sub_attr, value)
+
             continue
 
-        log.debug("option '%s' is '%s'", attr, getattr(config, attr))
+        log.debug("Option '%s' is '%s'", attr, getattr(config, attr))
 
     cli_path.append(str(context.invoked_subcommand))
-    log.debug("about to execute command: '%s'", context.invoked_subcommand)
+    log.debug("About to execute command: '%s'", context.invoked_subcommand)
     log.audit(f'command="{" ".join(sys.argv)}"')  # type: ignore
     config.cli_info = context.to_info_dict()
 
@@ -132,8 +132,10 @@ def greet(
     if not name:
         try:
             name = os.getlogin().capitalize()
+
         except OSError:  # We need this, will fail on GitHub otherwise...
             name = ""
+
     tools.greet(str(name), bye, log_enabled)
 
 
diff --git a/fotoobo/exceptions/exceptions.py b/fotoobo/exceptions/exceptions.py
index a67c586..06512cd 100644
--- a/fotoobo/exceptions/exceptions.py
+++ b/fotoobo/exceptions/exceptions.py
@@ -1,8 +1,6 @@
 """
 This is the fotoobo exception module.
 """
-
-
 from typing import Any
 
 from requests.exceptions import HTTPError
@@ -39,6 +37,7 @@ def __init__(self, err: Any) -> None:
         # self.message = "general API Error"
         self.code = 999
         self.message = "unknown"
+
         if isinstance(err, HTTPError):
             self.code = err.response.status_code
             message = self.http_status_codes.get(self.code, "general API Error")
@@ -50,7 +49,7 @@ def __init__(self, err: Any) -> None:
 class GeneralError(GeneralException):
     """
     The exception to raise if a general error occurred.
-    The class does not have any methods as the only one (__init__) is inherited from it's parent.
+    The class does not have any methods as the only one (__init__) is inherited from its parent.
     Raise a GeneralError when it does not make sense to do further processing and the program should
     stop and exit.
     """
@@ -59,6 +58,6 @@ class GeneralError(GeneralException):
 class GeneralWarning(GeneralException):
     """
     The exception to raise if a general warning occurred.
-    The class does not have any methods as the only one (__init__) is inherited from it's parent.
-    Raise a GeneralWarning if a part of the program fails but it is safe to du further processing.
+    The class does not have any methods as the only one (__init__) is inherited from its parent.
+    Raise a GeneralWarning if a part of the program fails but it is safe to do further processing.
     """
diff --git a/fotoobo/fortinet/convert.py b/fotoobo/fortinet/convert.py
index c75f500..3349173 100644
--- a/fotoobo/fortinet/convert.py
+++ b/fotoobo/fortinet/convert.py
@@ -6,7 +6,6 @@
 The Fortinet assets are referenced by their names. Even if we set an uuid we cannot use the uuid to
 access the asset. The uuid is only supported for network assets and not for service assets.
 """
-
 import copy
 import logging
 from pathlib import Path
@@ -44,13 +43,12 @@ def convert(self, obj_type: str, bulk_size: int = 100) -> List[Any]:
         Convert Checkpoint configuration objects into Fortinet syntax.
 
         Args:
-            obj_type (str): define the type of objects to convert
-            bulk_size: the bulk size to generate
+            obj_type:   Define the type of objects to convert
+            bulk_size:  The bulk size to generate
 
         Returns:
-            List: the converted assets
+            The converted assets
         """
-
         # fix for bulk problem with groups:
         # It seems that adding groups in bulk mode does not work correctly. If one of the entries
         # in a bulk set is invalid all of them are not added with the same error.
@@ -63,20 +61,20 @@ def convert(self, obj_type: str, bulk_size: int = 100) -> List[Any]:
         if obj_type not in self.assets:
             raise GeneralError(f"type '{obj_type}' is not present in the infile")
 
-        log.debug("converting asset type '%s'", obj_type)
-        log.debug("found '%s' asset(s)", len(self.assets[obj_type]))
+        log.debug("Converting asset type '%s'", obj_type)
+        log.debug("Found '%s' asset(s)", len(self.assets[obj_type]))
         assets = getattr(self, "_convert_" + obj_type)()
 
         # Now do the caching if cache_file is given
         if self.cache_file:
             cache: List[Any] = []
             if self.cache_file.is_file():
-                log.debug("found cache file '%s'", self.cache_file)
+                log.debug("Found cache file '%s'", self.cache_file)
                 cache = list(load_json_file(self.cache_file) or [])
 
             save_json_file(self.cache_file, assets)
             assets = [asset for asset in assets if asset not in cache]
-            log.debug("found '%s' new asset(s) not in cache", len(assets))
+            log.debug("Found '%s' new asset(s) not in cache", len(assets))
 
         # Now do the bulking
         i = 0
@@ -102,7 +100,7 @@ def _convert_hosts(self) -> Any:
         Convert Checkpoint host objects
 
         Returns:
-            Any: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["hosts"]
         assets = []
@@ -127,7 +125,7 @@ def _convert_networks(self) -> List[Dict[str, Any]]:
         Convert Checkpoint network objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["networks"]
         assets = []
@@ -152,7 +150,7 @@ def _convert_address_ranges(self) -> List[Dict[str, Any]]:
         Convert Checkpoint address range objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["address_ranges"]
         assets = []
@@ -179,7 +177,7 @@ def _convert_groups(self) -> List[Dict[str, Any]]:
         Convert Checkpoint group objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = copy.deepcopy(self.assets["groups"])
         assets = []
@@ -194,8 +192,9 @@ def _convert_groups(self) -> List[Dict[str, Any]]:
                         if net_object["uid"] == uid:
                             forti_members.append(net_object["name"])
                             found = True
+
                 if not found:
-                    log.error("Object with uid %s not found", uid)
+                    log.error("Object with uid '%s' not found", uid)
 
             param = {
                 "data": {
@@ -210,7 +209,7 @@ def _convert_groups(self) -> List[Dict[str, Any]]:
                 assets.append(param)
 
             else:
-                log.error("network group %s is empty", url_name)
+                log.error("Network group '%s' is empty", url_name)
 
         return assets
 
@@ -219,7 +218,7 @@ def _convert_services_icmp(self) -> List[Dict[str, Any]]:
         Convert Checkpoint services_icmp objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["services_icmp"]
         assets = []
@@ -247,7 +246,7 @@ def _convert_services_icmp6(self) -> List[Dict[str, Any]]:
         Convert Checkpoint services_icmp6 objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["services_icmp6"]
         assets = []
@@ -278,7 +277,7 @@ def _convert_services_tcp(self) -> List[Dict[str, Any]]:
         - "<5000" will be converted to "1-4999"
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["services_tcp"]
         assets = []
@@ -287,10 +286,13 @@ def _convert_services_tcp(self) -> List[Dict[str, Any]]:
             url_name = obj["name"].replace("/", "\\/")
             if obj["port"][0] == ">":
                 port_range = str(int(obj["port"][1:]) + 1) + "-65535"
+
             elif obj["port"][0] == "<":
                 port_range = "1-" + str(int(obj["port"][1:]) - 1)
+
             else:
                 port_range = obj["port"]
+
             param: Dict[str, Any] = {
                 "data": {
                     "comment": obj["comments"],
@@ -303,6 +305,7 @@ def _convert_services_tcp(self) -> List[Dict[str, Any]]:
             if not obj["use-default-session-timeout"]:
                 if (ttl := obj["session-timeout"]) < 300:  # FortiGate does not allow ttl < 300
                     ttl = 300
+
                 param["data"]["session-ttl"] = str(ttl)
 
             assets.append(param)
@@ -319,7 +322,7 @@ def _convert_services_udp(self) -> List[Dict[str, Any]]:
         to the _convert_services_tcp function.
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = self.assets["services_udp"]
         assets = []
@@ -328,10 +331,13 @@ def _convert_services_udp(self) -> List[Dict[str, Any]]:
             url_name = obj["name"].replace("/", "\\/")
             if obj["port"][0] == ">":
                 port_range = str(int(obj["port"][1:]) + 1) + "-65535"
+
             elif obj["port"][0] == "<":
                 port_range = "1-" + str(int(obj["port"][1:]) - 1)
+
             else:
                 port_range = obj["port"]
+
             param: Dict[str, Any] = {
                 "data": {
                     "comment": obj["comments"],
@@ -344,6 +350,7 @@ def _convert_services_udp(self) -> List[Dict[str, Any]]:
             if not obj["use-default-session-timeout"]:
                 if (ttl := obj["session-timeout"]) < 300:  # FortiGate does not allow ttl < 300
                     ttl = 300
+
                 param["data"]["session-ttl"] = str(ttl)
 
             assets.append(param)
@@ -355,7 +362,7 @@ def _convert_service_groups(self) -> List[Dict[str, Any]]:
         Convert Checkpoint service group objects
 
         Returns:
-            list: converted Fortinet objects
+            Converted Fortinet objects
         """
         objects = copy.deepcopy(self.assets["service_groups"])
         assets = []
@@ -384,8 +391,10 @@ def _convert_service_groups(self) -> List[Dict[str, Any]]:
                         if net_object["uid"] == uid:
                             forti_members.append(net_object["name"])
                             found = True
+
                 if not found:
-                    log.error("Object with uid %s not found", uid)
+                    log.error("Object with uid '%s' not found", uid)
+
             param = {
                 "data": {
                     "comment": obj["comments"],
@@ -398,6 +407,6 @@ def _convert_service_groups(self) -> List[Dict[str, Any]]:
                 assets.append(param)
 
             else:
-                log.error("service group %s is empty", url_name)
+                log.error("service group '%s' is empty", url_name)
 
         return assets
diff --git a/fotoobo/fortinet/fortianalyzer.py b/fotoobo/fortinet/fortianalyzer.py
index 42722f7..3dded01 100644
--- a/fotoobo/fortinet/fortianalyzer.py
+++ b/fotoobo/fortinet/fortianalyzer.py
@@ -21,10 +21,10 @@ def __init__(self, hostname: str, username: str, password: str, **kwargs: Any) -
         Set some initial parameters.
 
         Args:
-            hostname (str): the hostname of the FortiGate to connect to
-            username (str): username
-            password (str): password
-            **kwargs (dict): see Fortinet class for available arguments
+            hostname: The hostname of the FortiGate to connect to
+            username: Username
+            password: Password
+            **kwargs: See Fortinet class for available arguments
         """
         super().__init__(hostname, username, password, **kwargs)
         self.type = "fortianalyzer"
@@ -34,7 +34,7 @@ def get_version(self) -> str:
         Get FortiAnalyzer version
 
         Returns:
-            str: version
+            FortiAnalyzer version
         """
         faz_version = super().get_version()
         return faz_version
diff --git a/fotoobo/fortinet/forticlientems.py b/fotoobo/fortinet/forticlientems.py
index d1e9277..d047146 100644
--- a/fotoobo/fortinet/forticlientems.py
+++ b/fotoobo/fortinet/forticlientems.py
@@ -32,11 +32,11 @@ def __init__(
         Set some initial parameters.
 
         Args:
-            hostname (str): the hostname of the FortiClient EMS to connect to
-            username (str): username
-            password (str): password
-            cookie_path (str): path to write the cookie files (no cookie if empty)
-            **kwargs (dict): see Fortinet class for available arguments
+            hostname:    The hostname of the FortiClient EMS to connect to
+            username:    Username
+            password:    Password
+            cookie_path: Path to write the cookie files (no cookie if empty)
+            **kwargs:    See Fortinet class for available arguments
         """
         super().__init__(hostname, **kwargs)
         self.api_url = f"https://{self.hostname}:{self.https_port}/api/v1"
@@ -58,15 +58,15 @@ def api(  # pylint: disable=too-many-arguments
         API request to a FortiClientEMS device.
 
         Args:
-            method (str): request method from [get, post]
-            url (str): rest API URL to request data from
-            headers (dict): additional headers (if needed)
-            params (dict): dictionary with parameters (if needed)
-            payload (dict): JSON body for post requests (if needed)
-            timeout (float): the requests read timeout
+            method:  Request method from [get, post]
+            url:     Rest API URL to request data from
+            headers: Additional headers (if needed)
+            params:  Dictionary with parameters (if needed)
+            payload: JSON body for post requests (if needed)
+            timeout: The requests read timeout
 
         Returns:
-            response: response from the request
+            Response from the request
         """
         return super().api(
             method, url, payload=payload, params=params, timeout=timeout, headers=headers
@@ -80,22 +80,22 @@ def get_version(self) -> str:
         they support it in case of any issue.
 
         Returns:
-            str: version
+            FortiClient EMS version
         """
         try:
             response = self.api("get", "/system/consts/get?system_update_time=1")
 
         except APIError as err:
-            log.warning("%s returned: %s", self.hostname, err.message)
+            log.warning("'%s' returned: '%s'", self.hostname, err.message)
             raise GeneralWarning(f"{self.hostname} returned: {err.message}") from err
 
         try:
             ems_version: str = response.json()["data"]["System"]["VERSION"]
 
         except KeyError as err:
-            log.warning("did not find any FortiClient EMS version number in response")
+            log.warning("Did not find any FortiClient EMS version number in response")
             raise GeneralWarning(
-                "did not find any FortiClient EMS version number in response"
+                "Did not find any FortiClient EMS version number in response"
             ) from err
 
         return ems_version
@@ -105,14 +105,16 @@ def login(self) -> int:
         Login to the FortiClientEMS.
 
         Returns:
-            int: status code from the FortiClient EMS logon
+            Status code from the FortiClient EMS logon
         """
         status = 401
         cookie = Path(self.cookie_path).expanduser() / f"{self.hostname}.cookie"
+
         if self.cookie_path:
-            log.debug("searching cookie in %s", cookie)
+            log.debug("Searching cookie in '%s'", cookie)
+
             if cookie.is_file():
-                log.debug("cookie exists. skipping login")
+                log.debug("Cookie exists. Skipping login")
                 with cookie.open("rb") as cookie_file:
                     self.session.cookies.update(pickle.load(cookie_file))  # type: ignore
 
@@ -123,30 +125,32 @@ def login(self) -> int:
                         and int(response.json()["result"]["retval"]) == 1
                     ):
                         log.debug(
-                            "session with given cookie is valid (status: %s)", response.status_code
+                            "Session with given cookie is valid (status: '%s')",
+                            response.status_code,
                         )
                         status = response.status_code
 
                 except APIError as err:
-                    log.debug("session with given cookie is invalid (status: %s)", err.code)
+                    log.debug("Session with given cookie is invalid (status: '%s')", err.code)
                     status = err.code
 
             else:
-                log.debug("no cookie found for : %s", self.hostname)
+                log.debug("No cookie found for '%s'", self.hostname)
 
         if status == 401:
-            log.debug("login to %s", self.hostname)
+            log.debug("Login to '%s'", self.hostname)
             payload = {"name": self.username, "password": self.password}
             response = self.api("post", "/auth/signin", payload=payload)
+
             if response.status_code == 200 and self.cookie_path:
-                log.debug("saving cookie for %s", self.hostname)
+                log.debug("Saving cookie for '%s'", self.hostname)
 
                 try:
                     with cookie.open("wb") as cookie_file:
                         pickle.dump(self.session.cookies, cookie_file)
 
                 except FileNotFoundError:
-                    log.warning("unable to save cookie file: %s", str(cookie.resolve()))
+                    log.warning("Unable to save cookie file '%s'", str(cookie.resolve()))
 
             status = response.status_code
 
@@ -157,8 +161,8 @@ def logout(self) -> int:
         Logout from FortiClient EMS.
 
         Returns:
-            int: status code from the FortiClient EMS logout
+            Status code from the FortiClient EMS logout
         """
         response = self.api("get", "/auth/signout")
-        log.debug("logged out from %s (status: %s)", self.hostname, response.status_code)
+        log.debug("Logged out from '%s' (status: '%s')", self.hostname, response.status_code)
         return response.status_code
diff --git a/fotoobo/fortinet/fortigate.py b/fotoobo/fortinet/fortigate.py
index e6833d7..f7fd5f7 100644
--- a/fotoobo/fortinet/fortigate.py
+++ b/fotoobo/fortinet/fortigate.py
@@ -28,9 +28,9 @@ def __init__(
         Set some initial parameters.
 
         Args:
-            hostname:   The hostname of the FortiGate to connect to
-            token:      API access token from the FortiGate
-            **kwargs:   See Fortinet class for available arguments
+            hostname: The hostname of the FortiGate to connect to
+            token:    API access token from the FortiGate
+            **kwargs: See Fortinet class for available arguments
         """
         if not hostname:
             raise GeneralWarning("No hostname specified")
@@ -55,14 +55,14 @@ def api(  # pylint: disable=too-many-arguments
         needed session key.
 
         Args:
-            method (str): request method from [get, post]
-            url (str): rest API URL to request data from
-            params (dict): dictionary with parameters (if needed)
-            payload (dict): JSON body for post requests (if needed)
-            timeout (float): the requests read timeout
+            method:  Request method from [get, post]
+            url:     Rest API URL to request data from
+            params:  Dictionary with parameters (if needed)
+            payload: JSON body for post requests (if needed)
+            timeout: The requests read timeout
 
         Returns:
-            response: response from the request
+            Response from the request
         """
         self.session.headers.update({"Authorization": f"Bearer {self.token}"})
         return super().api(
@@ -74,10 +74,10 @@ def backup(self, timeout: int = 10) -> str:
         Get the configuration backup from a FortiGate.
 
         Args:
-            timeout (int): Timeout in sec to wait for the response
+            timeout: Timeout in sec to wait for the response
 
         Returns:
-            str: Configuration backup as text
+            Configuration backup as text
         """
         data = self.api(
             "get", "monitor/system/config/backup", params={"scope": "global"}, timeout=timeout
@@ -89,15 +89,16 @@ def get_version(self) -> str:
         Get FortiGate version
 
         Returns:
-            str: version
+            FortiGate version
         """
         fgt_version: str = ""
+
         try:
             response = self.api("get", "monitor/system/status")
+
         except APIError as err:
-            log.warning("%s returned: %s", self.hostname, err.message)
+            log.warning("'%s' returned: '%s'", self.hostname, err.message)
             raise GeneralWarning(f"{self.hostname} returned: {err.message}") from err
 
         fgt_version = response.json().get("version", "unknown")
-
         return fgt_version
diff --git a/fotoobo/fortinet/fortigate_config.py b/fotoobo/fortinet/fortigate_config.py
index 20787b1..33da559 100644
--- a/fotoobo/fortinet/fortigate_config.py
+++ b/fotoobo/fortinet/fortigate_config.py
@@ -31,6 +31,7 @@ def __init__(
         self.info = FortiGateInfo(**(info or {}))
         try:
             self.info.hostname = self.global_config["system"]["global"]["hostname"]
+
         except KeyError:
             self.info.hostname = "HOSTNAME UNKNOWN"
 
@@ -39,23 +40,24 @@ def get_configuration(self, scope: str = "global", path: str = "/") -> Any:
         Return a config snippet from the given configuration path.
 
         Args:
-            scope (str) : the configuration part to get the configuration from (global|vdom)
-            path (str)  : from where should the configuration come?
+            scope: The configuration part to get the configuration from (global|vdom)
+            path:  From where should the configuration come?
             Examples:
-            /                           : the whole configuration (default)
-            /system/global/...          : sub-path in global configuration
-            /system/global/admin-scp    : exact configuration option
-            /root/firewall/address/...  : sub-path in root vdom
+            /                           : The whole configuration (default)
+            /system/global/...          : Sub-path in global configuration
+            /system/global/admin-scp    : Exact configuration option
+            /root/firewall/address/...  : Sub-path in root vdom
 
         Returns:
-            any: FortiGateConfig configuration value or snippet from the given path.
+            FortiGateConfig configuration value or snippet from the given path.
             If the path or value does not exist None is returned.
         """
-        log.debug("getting configuration from scope: '%s'", scope)
-        log.debug("getting configuration from path: '%s'", path)
+        log.debug("Getting configuration from scope: '%s'", scope)
+        log.debug("Getting configuration from path: '%s'", path)
         # split the path by / and remove all empty parts
         path_list: List[str] = [p for p in path.strip("/").split("/") if p]
         config: Any = {}
+
         if scope == "global":
             config = self.global_config
 
@@ -66,6 +68,7 @@ def get_configuration(self, scope: str = "global", path: str = "/") -> Any:
             for key in path_list:
                 if key in config:
                     config = config[key]
+
                 else:
                     config = {}
                     break
@@ -75,14 +78,15 @@ def get_configuration(self, scope: str = "global", path: str = "/") -> Any:
     def get_vdoms(self) -> List[str]:
         """
         Get the list of configured VDOMs.
-        If it is a standalone configuration an empty list will be returned.
+        If it is a single vdom configuration an empty list will be returned.
 
         Returns:
-            List: List of VDOMs
+            List of VDOMs
         """
         vdoms: List[str] = []
         if self.info.vdom == "1":
             vdoms = list(self.vdom_config.keys())
+
         return vdoms
 
     def save_configuration_file(self, configuration_file: Path) -> None:
@@ -90,7 +94,7 @@ def save_configuration_file(self, configuration_file: Path) -> None:
         Save the configuration to a json configuration file.
 
         Args:
-            configuration_file (Path): The json file to load the FortiGate configuration from
+            configuration_file: The json file to load the FortiGate configuration from
         """
         save_json_file(
             configuration_file,
@@ -103,20 +107,23 @@ def parse_configuration_file(configuration_file: Path) -> "FortiGateConfig":
         Parse the FortiGate configuration from a file into a python object
 
         Args:
-            configuration_file (Path): the filename of the FortiGate configuration file
+            configuration_file: The filename of the FortiGate configuration file
 
         Returns:
-            FortiGateConfig: the parsed FortiGate configuration object
+            The parsed FortiGate configuration object
         """
-        log.debug("start configuration parser with file '%s'", configuration_file)
+        log.debug("Start configuration parser with file '%s'", configuration_file)
+
         FortiGateConfig._config_path = []
         with configuration_file.open(encoding="UTF-8") as forti_file:
             parsed_config = FortiGateConfig._parse_to_dict(forti_file)
 
         global_config: Dict[str, Any] = {}
         vdom_config: Dict[str, Any] = {}
+
         if "info" not in parsed_config:
             raise GeneralWarning(f"There is no info in {configuration_file}")
+
         info = parsed_config["info"]
         parsed_config.pop("info")
 
@@ -139,10 +146,10 @@ def load_configuration_file(configuration_file: Path) -> "FortiGateConfig":
         Create a FortiGateConfig object from a json configuration file.
 
         Args:
-            configuration_file (Path): The json file to load the FortiGate configuration from
+            configuration_file: The json file to load the FortiGate configuration from
 
         Returns:
-            FortiGateConfig: FortiGate configuration object
+            FortiGate configuration object
         """
         data = load_json_file(configuration_file)
         return FortiGateConfig(data["global"], data["vdom"], data["info"])  # type: ignore
@@ -153,13 +160,12 @@ def _config_convert_dict_to_list(config: Dict[str, Any]) -> List[Any]:
         Convert a FortiGate configuration list like part to a configuration list.
 
         Args:
-            config (dict): a FortiGate configuration list like part from a dict
+            config: A FortiGate configuration list like part from a dict
 
         Returns:
-            list: configuration list as list
+            Configuration list as list
         """
         configs: List[str] = []
-
         for key, value in config.items():
             new_config = value
             new_config["id"] = int(key)
@@ -173,10 +179,10 @@ def _config_is_list(config: Dict[str, Any]) -> bool:
         Check if a FortiGate configuration part contains a list of elements.
 
         Args:
-            config (dict): the FortiGate configuration part to check
+            config: The FortiGate configuration part to check
 
         Returns:
-            bool: is it a list (True) or not (False)
+            Is it a list (True) or not (False)
         """
         is_list = True
         if len(config) == 0:
@@ -194,11 +200,11 @@ def _get_nested_dict(configs: List[str], new_data: Any) -> Dict[str, Any]:
         Create a nested configuration dict from a list of strings and add new data to the last key.
 
         Args:
-            configs (list): configuration leafs to process
-            new_data (any): data to add to the last key
+            configs:  Configuration leafs to process
+            new_data: Data to add to the last key
 
         Returns:
-            dict: the nested configuration
+            The nested configuration
         """
         out_dict = {}
         key = configs.pop(0)
@@ -217,11 +223,11 @@ def _parse_config_comment(info: Dict[str, Any], line: str) -> Dict[str, str]:
         The values are then written to an info dict as meta-information.
 
         Args:
-            info (dict): the meta information dict to add information to
-            line (str): the FortiGate configuration comment line to parse
+            info: The meta information dict to add information to
+            line: The FortiGate configuration comment line to parse
 
         Returns:
-            dict: the updated meta information dict
+            The updated meta information dict
         """
         line = line.lstrip("#").strip()
         if line.startswith("config-version"):
@@ -244,10 +250,10 @@ def _parse_to_dict(config_file: IO[str]) -> Any:
         This recursive method parses a FortiGate configuration from a file line by line
 
         Args:
-            config_file (IO[str]): FortiGate configuration file object
+            config_file: FortiGate configuration file object
 
         Returns:
-            dict: A dict which contains the parsed FortiGate configuration
+            A dict which contains the parsed FortiGate configuration
         """
         config: Any = {}
         info: Dict[str, str] = {}
@@ -270,7 +276,9 @@ def _parse_to_dict(config_file: IO[str]) -> Any:
                 multiline += f"\n{line}"
                 if line.endswith('"'):
                     config[multiline_key], multiline = multiline.strip('"'), ""
+
                 continue
+
             # check if a multiline string starts. begin with "set" and uneven amount of quotes (")
             if line.startswith("set ") and line.count('"') % 2 == 1 and not line.endswith('"'):
                 _, multiline_key, value = line.split(maxsplit=2)  # first part is always "set"
@@ -300,6 +308,7 @@ def _parse_to_dict(config_file: IO[str]) -> Any:
 
                     if config_path[0] not in config:
                         config[config_path[0]] = {}
+
                     config[config_path[0]] = {**config[config_path[0]], **temp_config}
 
             if line.startswith("edit "):
@@ -311,6 +320,7 @@ def _parse_to_dict(config_file: IO[str]) -> Any:
                 FortiGateConfig._config_path.pop()
                 if FortiGateConfig._config_is_list(config):
                     config = FortiGateConfig._config_convert_dict_to_list(config)
+
                 return config
 
             if line == "next":
diff --git a/fotoobo/fortinet/fortigate_config_check.py b/fotoobo/fortinet/fortigate_config_check.py
index 788527c..39f5a6e 100644
--- a/fotoobo/fortinet/fortigate_config_check.py
+++ b/fotoobo/fortinet/fortigate_config_check.py
@@ -5,8 +5,8 @@
 from typing import Any, Dict, List
 
 from fotoobo.exceptions import GeneralError
-from fotoobo.helpers.result import Result
 from fotoobo.fortinet.fortigate_config import FortiGateConfig
+from fotoobo.helpers.result import Result
 
 log = logging.getLogger("fotoobo")
 
@@ -19,8 +19,8 @@ def __init__(self, config: FortiGateConfig, checks: Any, result: Result[Any]) ->
         Initialize the configuration checker.
 
         Args:
-            config (FortiGateConfig): the FortiGate configuration
-            checks (dict): the checks to do against the FortiGate configuration
+            config: The FortiGate configuration
+            checks: The checks to do against the FortiGate configuration
         """
         self.allowed_checks: List[str] = ["count", "exist", "value", "value_in_list"]
         self.config = config
@@ -32,8 +32,8 @@ def add_message(self, chk: Dict[str, Any], msg: str) -> None:
         Generates a styled message and appends it to the results.
 
         Args:
-            chk (Dict[str, any]): the check which generated the message
-            msg (str): the message to sent to the messages list
+            chk: The check which generated the message
+            msg: The message to send to the messages list
         """
         check_name = f" (check_name: [var]{chk['name']}[/])" if "name" in chk else ""
         message = f"[chk]{chk['type']}[/]: {msg}{check_name}"
@@ -48,11 +48,10 @@ def execute_checks(self) -> Result[Any]:  # pylint: disable=too-many-branches
         the checks and write the results into the results object.
         """
         if not self.checks:
-            log.error("there are no checks defined")
-            raise GeneralError("there are no checks defined")
+            log.error("There are no checks defined")
+            raise GeneralError("There are no checks defined")
 
         for check in self.checks:
-
             # applying info filter
             skip = False
             for info_filter in check.get("filter-info", []):
@@ -60,26 +59,28 @@ def execute_checks(self) -> Result[Any]:  # pylint: disable=too-many-branches
                     if not getattr(self.config.info, info_filter) < str(
                         check["filter-info"][info_filter][1:]
                     ):
-                        log.debug("skipping check due to filter-info '%s'", info_filter)
+                        log.debug("Skipping check due to filter-info '%s'", info_filter)
                         skip = True
+
                 elif str(check["filter-info"]).startswith(">"):
                     if not getattr(self.config.info, info_filter) > str(
                         check["filter-info"][info_filter][1:]
                     ):
-                        log.debug("skipping check due to filter-info '%s'", info_filter)
+                        log.debug("Skipping check due to filter-info '%s'", info_filter)
                         skip = True
+
                 else:
                     if not getattr(self.config.info, info_filter) == str(
                         check["filter-info"][info_filter]
                     ):
-                        log.debug("skipping check due to filter-info '%s'", info_filter)
+                        log.debug("Skipping check due to filter-info '%s'", info_filter)
                         skip = True
 
             # applying config_filter
             for conf_filter in check.get("filter-config", []):
                 config = self.config.get_configuration(check["scope"], conf_filter)
                 if not config == check["filter-config"][conf_filter]:
-                    log.debug("skipping check due to filter-config '%s'", conf_filter)
+                    log.debug("Skipping check due to filter-config '%s'", conf_filter)
                     skip = True
 
             if skip:
@@ -87,17 +88,17 @@ def execute_checks(self) -> Result[Any]:  # pylint: disable=too-many-branches
 
             # check if needed check keys are present
             if miss := ("type", "scope", "path", "checks") - check.keys():
-                log.error("key(s) %s missing in %s", miss, check.get("name", "unnamed check"))
+                log.error("Key(s) '%s' missing in '%s'", miss, check.get("name", "unnamed check"))
                 continue
 
             # check if checks are defined
             if not check["checks"]:
-                log.error("no checks defined in %s", check.get("name", "unnamed check"))
+                log.error("No checks defined in '%s'", check.get("name", "unnamed check"))
                 continue
 
             if not check["type"] in self.allowed_checks:
                 log.error(
-                    "check type %s not available in %s",
+                    "Check type '%s' not available in '%s'",
                     check.get("type"),
                     check.get("name", "unnamed check"),
                 )
@@ -114,6 +115,7 @@ def execute_checks(self) -> Result[Any]:  # pylint: disable=too-many-branches
 
                     else:
                         config = self.config.get_configuration("vdom", "/root" + check["path"])
+
                     getattr(self, "_check_" + check["type"])(config, check)
 
                 elif self.config.info.vdom == "1":
@@ -131,7 +133,7 @@ def _check_count(self, config: Any, chk: Dict[str, Any]) -> None:
 
         Args:
             config: FortiGate configuration part to check
-            chk (dict): the check dict to process
+            chk:    The check dict to process
         """
         if isinstance(config, list):
             conf_len = len(config)
@@ -148,15 +150,15 @@ def _check_count(self, config: Any, chk: Dict[str, Any]) -> None:
                     )
 
         else:
-            log.warning("%s is not a configuration list", chk["path"])
+            log.warning("'%s' is not a configuration list", chk["path"])
 
     def _check_exist(self, config: Any, chk: Dict[str, Any]) -> None:
         """
-        Check if a configuration option is present (or not) regardless of it's value.
+        Check if a configuration option is present (or not) regardless of its value.
 
         Args:
             config: FortiGate configuration part to check
-            chk (dict): the check dict to process
+            chk:    The check dict to process
         """
         for key, value in chk["checks"].items():
             if bool(key in config) != value:
@@ -172,13 +174,14 @@ def _check_value(self, config: Any, chk: Dict[str, Any]) -> None:
 
         Args:
             config: FortiGate configuration part to check
-            chk (dict): the check dict to process
+            chk:    The check dict to process
         """
         for key, value in chk["checks"].items():
             msg_key = f"[var]{key}[/]"
             msg_path = f"[var]{chk['path']}[/]"
+
             if key in config:
-                log.debug("key '%s' in '%s' is '%s'", msg_key, msg_path, config[key])
+                log.debug("Key '%s' in '%s' is '%s'", msg_key, msg_path, config[key])
                 if str(value) != config[key]:
                     self.add_message(
                         chk,
@@ -196,15 +199,17 @@ def _check_value_in_list(self, config: Any, chk: Dict[str, Any]) -> None:
 
         Args:
             config: FortiGate configuration part to check
-            chk (dict): the check dict to process
+            chk:    The check dict to process
         """
         inverse: bool = chk.get("inverse", False)
         msg_not = "" if inverse else "not "
+
         for key, val in chk["checks"].items():
             msg_key = f"[var]{key}[/]"
             msg_val = f"[var]{val}[/]"
             msg_path = f"[var]{chk['path']}[/]"
             exist = False
+
             for conf in config:
                 if key in conf and val == conf[key]:
                     exist = True
diff --git a/fotoobo/fortinet/fortimanager.py b/fotoobo/fortinet/fortimanager.py
index 2d828e4..d1fdff7 100644
--- a/fotoobo/fortinet/fortimanager.py
+++ b/fotoobo/fortinet/fortimanager.py
@@ -24,13 +24,13 @@ def __init__(self, hostname: str, username: str, password: str, **kwargs: Any) -
         Set some initial parameters.
 
         Args:
-            hostname:       The hostname of the FortiGate to connect to
-            username:       The Username
-            password:       The password
+            hostname: The hostname of the FortiGate to connect to
+            username: The username
+            password: The password
 
         Keyword Args:
-            session_dir:    The path where to load/save the FortiManager session key
-            **kwargs:       See Fortinet class for more available arguments
+            session_dir: The path where to load/save the FortiManager session key
+            **kwargs:    See Fortinet class for more available arguments
         """
         super().__init__(hostname, **kwargs)
         self.api_url = f"https://{self.hostname}:{self.https_port}/jsonrpc"
@@ -83,17 +83,19 @@ def api(  # pylint: disable=too-many-arguments
         needed session key.
 
         Args:
-            method:     Request method from [get, post]
-            url:        Rest API URL to request data from
-            params:     Dictionary with parameters (if needed)
-            payload:    JSON body for post requests (if needed)
-            timeout:    The requests read timeout in seconds
+            method:  Request method from [get, post]
+            url:     Rest API URL to request data from
+            headers: Dictionary with headers (if needed)
+            params:  Dictionary with parameters (if needed)
+            payload: JSON body for post requests (if needed)
+            timeout: The requests read timeout in seconds
 
         Returns:
             Response from the request
         """
         if not self.session_key:
             self.login()
+
         payload = payload or {}
         if method.lower() == "post":
             payload["session"] = self.session_key
@@ -107,20 +109,21 @@ def assign_all_objects(self, adoms: str, policy: str) -> int:
         Copies all objects from the global ADOM database to a given ADOM.
 
         Args:
-            adoms (str): The ADOM to assign the global policy/objects to. If you specify an invalid
-                ADOM name you'll get a permission error. You can specify multiple ADOMs by
-                separating them with a comma (no spaces)
-
-            policy (str): Specify the global policy to assign [Default: 'default'].
+            adoms:  The ADOM to assign the global policy/objects to. If you specify an invalid ADOM
+                    name you'll get a permission error. You can specify multiple ADOMs by separating
+                    them with a comma (no spaces)
+            policy: Specify the global policy to assign [Default: 'default'].
 
         Returns:
-            int: The id of the FortiManager task created or 0 (zero) if unsuccessful
+            The id of the FortiManager task created or 0 (zero) if unsuccessful
 
         """
         task_id = 0
         adom_payload = []
+
         for adom in adoms.split(","):
             adom_payload.append({"adom": adom, "excluded": "disable"})
+
         payload = {
             "method": "exec",
             "params": [
@@ -135,13 +138,15 @@ def assign_all_objects(self, adoms: str, policy: str) -> int:
             ],
         }
         response = self.api("post", payload=payload)
+
         if response.status_code == 200:
             if response.json()["result"][0]["status"]["code"] == 0:
                 task_id = response.json()["result"][0]["data"]["task"]
-                log.debug("assign task created with id %s", task_id)
+                log.debug("Assign task created with id '%s'", task_id)
+
             else:
                 log.debug(
-                    "did not assign to '%s' with error '%s'",
+                    "Did not assign to '%s' with error '%s'",
                     adoms,
                     response.json()["result"][0]["status"]["message"],
                 )
@@ -156,13 +161,15 @@ def get_adoms(self, ignored_adoms: Optional[List[str]] = None) -> List[Any]:
         Some of the ADOMs are ignored by default as the are not used in most cases
 
         Returns:
-            list: list of FortiManager ADOMs
+            List of FortiManager ADOMs
         """
         if not ignored_adoms:
             ignored_adoms = self.ignored_adoms
+
         fmg_adoms: List[Any] = []
         payload = {"method": "get", "params": [{"url": "/dvmdb/adom"}]}
         response = self.api("post", payload=payload)
+
         for adom in response.json()["result"][0]["data"]:
             if not adom["name"] in ignored_adoms:
                 fmg_adoms.append(adom)
@@ -174,17 +181,19 @@ def get_version(self) -> str:
         Get FortiManager version.
 
         Returns:
-            str: version
+            FortiManager version
         """
         fmg_version: str = ""
         payload = {"method": "get", "params": [{"url": "/sys/status"}]}
         response = self.api("post", payload=payload)
+
         if response.status_code == 200:
             try:
                 match: Optional[re.Match[Any]] = re.search(
                     r"(v\d+\.\d+\.\d+)-", response.json()["result"][0]["data"]["Version"]
                 )
                 fmg_version = str(match.group(1))  # type: ignore
+
             except (KeyError, IndexError, AttributeError):
                 log.debug("did not find any FortiManager version number in response")
 
@@ -198,14 +207,15 @@ def login(self) -> int:
         We do not use requests.session as the session key is just a string which is saved directly.
 
         Returns:
-            int: status code from the FortiManager login
+            Status code from the FortiManager login
         """
         status: int = 401
 
         if self.session_path:
             session_file = Path(self.session_path).expanduser() / f"{self.hostname}.key"
             if session_file.exists():
-                log.debug("loading session key from file '%s'", session_file)
+                log.debug("Loading session key from file '%s'", session_file)
+
                 with session_file.open(encoding="UTF-8") as file:
                     self.session_key = file.read()
                     payload = {
@@ -215,20 +225,22 @@ def login(self) -> int:
                     }
                     response = super().api("post", payload=payload)
                     status = response.status_code
+
                     if (
                         response.status_code == 200
                         and response.json()["result"][0]["status"]["code"] == 0
                     ):
                         log.debug("Session key is still valid")
+
                     else:
                         log.debug("Session key is invalid")
                         self.session_key = ""
 
             else:
-                log.debug("session file '%s' does ot exist", session_file)
+                log.debug("Session file '%s' does ot exist", session_file)
 
         if not self.session_key and self.username and self.password:
-            log.debug("login to %s", self.hostname)
+            log.debug("Login to '%s'", self.hostname)
             payload = {
                 "method": "exec",
                 "params": [
@@ -243,8 +255,10 @@ def login(self) -> int:
                 if "session" in response.json():
                     log.debug("store session key")
                     self.session_key = response.json()["session"]
+
                     if self.session_path:
-                        log.debug("saving session key into file '%s'", session_file)
+                        log.debug("Saving session key into file '%s'", session_file)
+
                         with session_file.open("w", encoding="UTF-8") as file:
                             file.write(self.session_key)
 
@@ -257,7 +271,7 @@ def logout(self) -> int:
         Logout from FortiManager.
 
         Returns:
-            int: status code from the FortiManager logout
+            Status code from the FortiManager logout
         """
         payload: Dict[str, Any] = {
             "method": "exec",
@@ -275,13 +289,12 @@ def post(self, adom: str, payloads: Any) -> List[str]:
         You can pass a single payload (Dict) or a list of payloads (List of Dict).
 
         Args:
-            adom (str): the ADOM name to issue the set commands to. If you wish to update the
-                        Global ADOM specify 'global' as ADOM.
-
-            payload(s) (Any): one payload (Dict) or a list of payloads (List of Dict)
+            adom:     The ADOM name to issue the set commands to. If you wish to update the
+                      Global ADOM specify 'global' as ADOM.
+            payloads: One payload (Dict) or a list of payloads (List of Dict)
 
         Returns:
-            int: amount of errors ocurred during the set command
+            Amount of errors ocurred during the set command
         """
         # if payload is a dict convert it to a list with one dict in it.
         if isinstance(payloads, dict):
@@ -317,20 +330,20 @@ def wait_for_task(self, task_id: int, timeout: int = 60) -> List[Any]:
         Wait for a task with a given id for its end and returns the message(s).
 
         Args:
-            id (int): Task id to wait for
-
-            timeout (int): Timeout in seconds
+            id:      Task id to wait for
+            timeout: Timeout in seconds
 
         Returns:
-            List: Message list
+            Message list
         """
-        log.debug("waiting for task id %s", task_id)
+        log.debug("Waiting for task id '%s'", task_id)
         messages: List[Any] = []
         payload = {
             "method": "get",
             "params": [{"url": f"/task/task/{task_id}"}],
         }
         percent_cache = -1
+
         while timeout:
             response = self.api("post", payload=payload)
             percent = response.json()["result"][0]["data"]["percent"]
@@ -350,6 +363,7 @@ def wait_for_task(self, task_id: int, timeout: int = 60) -> List[Any]:
             "params": [{"url": f"/task/task/{task_id}/line"}],
         }
         response = self.api("post", payload=payload)
+
         if response.status_code == 200:
             messages = response.json()["result"][0]["data"]
             # enrich the message(s) with the task_id (otherwise it will be lost)
diff --git a/fotoobo/fortinet/fortinet.py b/fotoobo/fortinet/fortinet.py
index efb1c71..560bf00 100644
--- a/fotoobo/fortinet/fortinet.py
+++ b/fotoobo/fortinet/fortinet.py
@@ -31,22 +31,21 @@ def __init__(self, hostname: str, **kwargs: Any) -> None:
         increase. (https://docs.python-requests.org/en/master/user/advanced/)
 
         Args:
-            hostname (str): the hostname of the Fortinet device to connect to
+            hostname: The hostname of the Fortinet device to connect to
 
         Keyword Args:
-            https_port (int): The tcp port number to connect to the https api
+            https_port: The tcp port number to connect to the https api
                 If you do not specify a port number it is set to 443 by default.
-            proxy (str): proxy server to use to connect to the Fortinet device
+            proxy: The Proxy server to use to connect to the Fortinet device
                 If you need to connect to your Fortinet device through a proxy server you can
                 set it here as as string. If needed you may append the proxy server port with a
                 column to the proxy server. e.g. "proxy.local:8000".
-            ssl_verify (bool | str): enable/disable SSL certificate check
+            ssl_verify: Enable or disable SSL certificate check
                 When ssl_verify is enabled you have to install a trusted SSL certificate onto
                 the device you wish to connect to. If you set ssl_verify to false it will also
                 disable the warnings in urllib3. This prevents unwanted SSL warnings to be
                 logged.
-
-            timeout (float): connection timeout in seconds
+            timeout: Connection timeout in seconds
         """
         self.api_url: str = ""
         self.hostname: str = hostname
@@ -54,6 +53,7 @@ def __init__(self, hostname: str, **kwargs: Any) -> None:
         self.session = requests.Session()
         self.session.trust_env = False
         self.session.proxies: Dict[str, Any] = {"http": None, "https": None}  # type: ignore
+
         if proxy := kwargs.get("proxy", ""):
             self.session.proxies = {"http": f"{proxy}", "https": f"{proxy}"}
 
@@ -77,14 +77,15 @@ def api(  # pylint: disable=too-many-arguments
         API request to a Fortinet device.
 
         Args:
-            method (str): request method from [get, post]
-            url (str): rest API URL to request data from
-            params (dict): dictionary with parameters (if needed)
-            payload (dict): JSON body for post requests (if needed)
-            timeout (float): the requests read timeout
+            method:  Request method from [get, post]
+            url:     Rest API URL to request data from
+            headers: Dictionary with headers (if needed)
+            params:  Dictionary with parameters (if needed)
+            payload: JSON body for post requests (if needed)
+            timeout: The requests read timeout
 
         Returns:
-            response: response from the request
+            Response from the request
         """
         full_url = f"{self.api_url}/{url.strip('/')}".strip("/")
         params = params or {}
@@ -111,22 +112,23 @@ def api(  # pylint: disable=too-many-arguments
                 )
 
             else:
-                log.debug("unknown API method")
-                raise GeneralError("unknown API method")
+                log.debug("Unknown API method")
+                raise GeneralError("Unknown API method")
 
         except requests.exceptions.ConnectTimeout as err:
             log.debug(err)
-            raise GeneralError(f"connection timeout ({self.hostname})") from err
+            raise GeneralError(f"Connection timeout ({self.hostname})") from err
 
         except requests.exceptions.ConnectionError as err:
             log.debug(err)
-            error = "unknown connection error"
+            error = "Unknown connection error"
+
             try:
                 if "Name or service not known" in err.args[0].reason.args[0]:
-                    error = "name or service not known"
+                    error = "Name or service not known"
 
                 elif "Connection refused" in err.args[0].reason.args[0]:
-                    error = "connection refused"
+                    error = "Connection refused"
 
             except (IndexError, AttributeError, TypeError):
                 pass
@@ -136,7 +138,7 @@ def api(  # pylint: disable=too-many-arguments
                     err.args[0].reason.args[0].verify_message
                     == "unable to get local issuer certificate"
                 ):
-                    error = "unable to get local issuer certificate"
+                    error = "Unable to get local issuer certificate"
             except (IndexError, AttributeError, TypeError):
                 pass
 
@@ -147,7 +149,7 @@ def api(  # pylint: disable=too-many-arguments
             raise GeneralError(f"read timeout ({self.hostname})") from err
 
         log.debug(
-            'request time: [bold green]%2dms[/] "%s %s"',
+            'Request time: [bold green]%2dms[/] "%s %s"',
             ((time() - start) * 1000),
             method.upper(),
             full_url,
@@ -155,6 +157,7 @@ def api(  # pylint: disable=too-many-arguments
 
         try:
             response.raise_for_status()
+
         except requests.exceptions.HTTPError as err:
             raise APIError(err) from err
 
@@ -166,7 +169,7 @@ def get_vendor() -> str:
         Returns the vendor of the product (which always is Fortinet).
 
         Returns:
-            str: always returns "Fortinet" (what a cool method ;-)
+            Always returns "Fortinet" (what a cool method ;-)
         """
         return "Fortinet"
 
diff --git a/fotoobo/helpers/cli.py b/fotoobo/helpers/cli.py
index 30a231f..99defca 100644
--- a/fotoobo/helpers/cli.py
+++ b/fotoobo/helpers/cli.py
@@ -15,12 +15,12 @@ def walk_cli_info(
     Recursively create the cli command tree from a Typer info dict.
 
     Args:
-        info (Dict): The Typer info dict from Typer.Context.to_info_dict() to walk through
-        tree (Tree): The rich tree object to build
-        command_path (List): The command path as a list
+        info:         The Typer info dict from Typer.Context.to_info_dict() to walk through
+        tree:         The rich tree object to build
+        command_path: The command path as a list
 
     Returns:
-        Tree: The complete rich Tree object
+        The complete rich Tree object
     """
     command_path = command_path or []
     commands = info["commands"]
@@ -28,11 +28,13 @@ def walk_cli_info(
     for command in sorted(commands):
         if commands[command]["hidden"]:
             continue
+
         text = Text(overflow="ellipsis", no_wrap=True)
         text.append(commands[command]["name"], style="bold cyan")
         text.append(" " * max((20 - len(command_path) * 4 - len(command)), 2))
         text.append(commands[command]["help"].split("\n")[0], style="grey53")
         branch = tree.add(text)
+
         if "commands" in commands[command]:
             walk_cli_info(commands[command], branch, command_path + [command])
 
diff --git a/fotoobo/helpers/config.py b/fotoobo/helpers/config.py
index 6c62873..e39e183 100644
--- a/fotoobo/helpers/config.py
+++ b/fotoobo/helpers/config.py
@@ -9,7 +9,7 @@
 import os
 from dataclasses import dataclass, field
 from pathlib import Path
-from typing import Any, Dict, Optional, Union
+from typing import Any, Dict, Optional
 
 from fotoobo.exceptions import GeneralError
 from fotoobo.helpers.files import load_yaml_file
@@ -25,8 +25,8 @@ class Config:
 
     # set default values
     inventory_file: Path = Path("inventory.yaml")
-    logging: Union[Dict[str, Any], None] = None
-    audit_logging: Union[Dict[str, Any], None] = None
+    logging: Optional[Dict[str, Any]] = None
+    audit_logging: Optional[Dict[str, Any]] = None
     no_logo: bool = False
     cli_info: Dict[str, Any] = field(default_factory=dict)
     vault: Dict[str, str] = field(default_factory=dict)
@@ -40,7 +40,7 @@ def load_configuration(self, config_file: Optional[Path] = None) -> None:
         option not present in the configuration file is set with its default.
 
         Args:
-            config_file (Path): fotoobo configuration file to load configuration from
+            config_file: fotoobo configuration file to load configuration from
         """
 
         # If no explicit config file has been given, search at the predefined places
diff --git a/fotoobo/helpers/files.py b/fotoobo/helpers/files.py
index 15dda62..17dbf9b 100644
--- a/fotoobo/helpers/files.py
+++ b/fotoobo/helpers/files.py
@@ -11,7 +11,6 @@
 
 import yaml
 
-
 from fotoobo.exceptions import GeneralError
 
 log = logging.getLogger("fotoobo")
@@ -30,6 +29,7 @@ def create_dir(directory: Path) -> None:
     if not directory.is_dir():
         try:
             directory.mkdir(parents=True)
+
         except OSError as err:
             raise GeneralError(f"Unable to create directory {directory}") from err
 
@@ -39,10 +39,8 @@ def file_to_ftp(file: Path, server: Any) -> int:
     Upload a file to a ftp server.
 
     Args:
-        file (Path): The source file to upload
-
-        server (dict): the ftp sever definition dict containing the following keys:
-
+        file:   The source file to upload
+        server: The ftp sever definition dict containing the following keys:
             * hostname
             * directory
             * username
@@ -50,12 +48,14 @@ def file_to_ftp(file: Path, server: Any) -> int:
             * protocol (default="sftp")
 
     Returns:
-        int: return code
+        Return code
     """
     return_code = 0
+
     if file.is_file():
         if hasattr(server, "protocol"):
             protocol = server.protocol
+
         else:
             protocol = "sftp"
 
@@ -65,6 +65,7 @@ def file_to_ftp(file: Path, server: Any) -> int:
                 ftp.sendcmd(f"USER {server.username}")
                 ftp.sendcmd(f"PASS {server.password}")
                 ftp.cwd(server.directory)
+
                 with file.open("rb") as ftp_file:
                     response = ftp.storbinary(f"STOR {file.name}", ftp_file)
                     if response != "226 Transfer complete.":
@@ -75,6 +76,7 @@ def file_to_ftp(file: Path, server: Any) -> int:
             with FTP(server.hostname, server.username, server.password) as ftp:
                 log.debug("FTP transfer for '%s'", server.hostname)
                 ftp.cwd(server.directory)
+
                 with file.open("rb") as ftp_file:
                     response = ftp.storbinary(f"STOR {file.name}", ftp_file)
                     if response != "226 Transfer complete.":
@@ -95,15 +97,13 @@ def file_to_zip(src: Path, dst: Path, level: int = 9) -> None:
     Zip (compress) a file.
 
     Args:
-        src (Path): the source file
-
-        dst (Path): the destination file (zipfile). If the dst file ends with extension '.zip'
-        the inner file will omit the '.zip' extension.
-
-        level (int): compression level, as accepted by `zipfile.ZipFile`
+        src:   The source file
+        dst:   The destination file (zipfile). If the dst file ends with extension '.zip' the inner
+               file will omit the '.zip' extension.
+        level: Compression level, as accepted by `zipfile.ZipFile`
 
     Returns:
-        int: return code
+        Return code
     """
     if level < 0 or level > 9:
         raise GeneralError("zip level must between 0 and 9")
@@ -119,10 +119,10 @@ def load_json_file(json_file: Path) -> Union[List[Any], Dict[str, Any], None]:
     Loads the content of a json file into a list or dict.
 
     Args:
-        json_file (Path): The path to the json file to load
+        json_file: The path to the json file to load
 
     Returns:
-        list|dict|None: list or dict with json data from filename or None if file is not found
+        List or dict with json data from filename or None if file is not found
     """
     content = None
     if json_file.is_file():
@@ -137,10 +137,10 @@ def load_yaml_file(yaml_file: Path) -> Union[List[Any], Dict[str, Any], None]:
     Loads the content of a yaml file into a list or dict.
 
     Args:
-        yaml_file (Path): The file of the yaml file to load
+        yaml_file: The file of the yaml file to load
 
     Returns:
-        list|dict: yaml data from filename
+        Yaml data from filename
     """
     content = None
     if yaml_file.is_file():
@@ -154,8 +154,11 @@ def save_json_file(json_file: Path, data: Union[List[Any], Dict[Any, Any]]) -> b
     Saves the content of a list or dict to a json file.
 
     Args:
-        json_file (Path): The file to write the json dato into
-        data (list|dict): data to save
+        json_file: The file to write the data into
+        data:      The data to save
+
+        Returns:
+        True if data was valid
     """
     status = True
     if isinstance(data, (list, dict)):
@@ -173,12 +176,11 @@ def save_yaml_file(yaml_file: Path, data: Union[List[Any], Dict[str, Any]]) -> b
     Saves the content of a list or dict to a yaml file.
 
     Args:
-        yaml_file (Path): the file to write the yaml data into
-
-        data (list|dict): data to save
+        yaml_file: The file to write the data into
+        data:      The data to save
 
     Returns:
-        bool: returns true if data was valid
+        True if data was valid
     """
     status = True
     if isinstance(data, (list, dict)):
diff --git a/fotoobo/helpers/log.py b/fotoobo/helpers/log.py
index 33bfd8e..594b07f 100644
--- a/fotoobo/helpers/log.py
+++ b/fotoobo/helpers/log.py
@@ -19,7 +19,7 @@
     LOG_USER,
     LOG_WARNING,
 )
-from typing import Optional, Union
+from typing import Optional
 
 from rich.logging import RichHandler
 
@@ -49,7 +49,6 @@ def __init__(self, facility: int, fmt: str = "%(message)s", datefmt: Optional[st
         # See https://stackoverflow.com/questions/4399617/python-os-getlogin-problem
         self.user = pwd.getpwuid(os.getuid())[0]
         self.hostname = socket.gethostname()
-
         super().__init__(fmt=fmt, datefmt=datefmt)
 
     def format(self, record: logging.LogRecord) -> str:
@@ -58,18 +57,25 @@ def format(self, record: logging.LogRecord) -> str:
 
         Args:
             record:
-        """
 
+        Returns:
+            A string
+        """
         if record.levelname == "DEBUG":
             level: int = LOG_DEBUG
+
         elif record.levelname == "INFO":
             level = LOG_INFO
+
         elif record.levelname == "WARNING":
             level = LOG_WARNING
+
         elif record.levelname == "ERROR":
             level = LOG_ERR
+
         elif record.levelname == "CRITICAL":
             level = LOG_CRIT
+
         else:
             raise NotImplementedError(f"Loglevel {record.levelname} cannot be processed!")
 
@@ -77,7 +83,6 @@ def format(self, record: logging.LogRecord) -> str:
 
         prival = self.facility + level
         timestamp = datetime.fromtimestamp(record.created).astimezone().isoformat()
-
         return (
             " ".join(
                 [
@@ -104,17 +109,17 @@ class Log:
     """
 
     @staticmethod
-    def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) -> None:
+    def configure_logging(quiet: Optional[bool], log_level: Optional[str]) -> None:
         """
         This function will configure the logging for fotoobo
 
         Args:
-            quiet:      Disables the console logging
-            log_level:  The desired log_level (given by CLI argument)
+            quiet:     Disables the console logging
+            log_level: The desired log_level (given by CLI argument)
 
         Raises:
-            GeneralError:   On unrecoverable errors (usually on non-existing/empty or
-                            invalid logging configuration file
+            GeneralError: On unrecoverable errors (usually on non-existing/empty or
+                          invalid logging configuration file
         """
         # pylint: disable=too-many-branches
         # pylint: disable=too-many-statements
@@ -132,10 +137,13 @@ def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) ->
 
                 except ValueError as error:
                     raise GeneralError(f"Cannot configure logging: {str(error)}") from error
+
                 except TypeError as error:
                     raise GeneralError(f"Cannot configure logging: {str(error)}") from error
+
                 except AttributeError as error:
                     raise GeneralError(f"Cannot configure logging: {str(error)}") from error
+
                 except ImportError as error:
                     raise GeneralError(f"Cannot configure logging: {str(error)}") from error
 
@@ -177,21 +185,17 @@ def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) ->
                 # requested
                 if config.logging:
                     log_level = log_level if log_level else config.logging["level"]
-
                     logger.setLevel(log_level)
                     logging.getLogger("requests").setLevel(log_level)
                     logging.getLogger("urllib3").setLevel(log_level)
-
                     logger.handlers = []
 
                     # Configure console logging
                     if "log_console" in config.logging:
                         console_handler = RichHandler(markup=True)
-
                         console_handler.setFormatter(
                             logging.Formatter(fmt="[grey37]%(name)s[/] %(message)s", datefmt="[%X]")
                         )
-
                         logger.addHandler(console_handler)
 
                     if "log_file" in config.logging:
@@ -200,14 +204,12 @@ def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) ->
                             maxBytes=10485760,  # 10 MByte
                             backupCount=3,
                         )
-
                         file_handler.setFormatter(
                             logging.Formatter(
                                 "%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d: "
                                 "%(message)s"
                             )
                         )
-
                         logger.addHandler(file_handler)
 
                     if "log_syslog" in config.logging:
@@ -221,32 +223,29 @@ def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) ->
                                 if config.logging["log_syslog"]["protocol"] == "TCP"
                                 else socket.SOCK_DGRAM,
                             )
+
                         except (OSError, socket.gaierror) as error:
                             raise GeneralError(
                                 f"Cannot configure SysLog logging: {str(error)}"
                             ) from error
 
                         syslog_handler.setFormatter(SysLogFormatter(LOG_USER))
-
                         logger.addHandler(syslog_handler)
 
                 # Configure audit logging
                 if config.audit_logging:
                     audit_logger.setLevel(logging.INFO)
-
                     if "log_file" in config.audit_logging:
                         audit_file_handler = RotatingFileHandler(
                             filename=config.audit_logging["log_file"]["name"],
                             maxBytes=10485760,  # 10 MByte
                             backupCount=3,
                         )
-
                         audit_file_handler.setFormatter(
                             logging.Formatter(
                                 fmt="%(asctime)s - AUDIT - %(filename)s:%(lineno)d: %(message)s"
                             )
                         )
-
                         audit_logger.addHandler(audit_file_handler)
 
                     if "log_syslog" in config.audit_logging:
@@ -261,6 +260,7 @@ def configure_logging(quiet: Union[bool, None], log_level: Union[str, None]) ->
                                 if config.audit_logging["log_syslog"]["protocol"] == "TCP"
                                 else socket.SOCK_DGRAM,
                             )
+
                         except (OSError, socket.gaierror) as error:
                             raise GeneralError(
                                 f"Cannot configure SysLog logging: {str(error)}"
@@ -280,7 +280,6 @@ def audit(message: str) -> None:
         """
         Create an audit log message
         """
-
         audit_logger.info(message)
 
 
diff --git a/fotoobo/helpers/output.py b/fotoobo/helpers/output.py
index 81c477b..df6d738 100644
--- a/fotoobo/helpers/output.py
+++ b/fotoobo/helpers/output.py
@@ -2,8 +2,8 @@
 The beautiful output helper
 """
 import os
-from pathlib import Path
 from datetime import datetime
+from pathlib import Path
 from typing import Any, Dict, List
 
 from rich.console import Console
@@ -25,11 +25,11 @@ def print_logo() -> None:
 
 def write_policy_to_html(data: List[Dict[str, Any]], out_file: Path) -> None:
     """
-    Write a
+    Write a Firewall policy to a HTML file
 
     Args:
-        data (List)   : List of Dicts with data
-        out_file (Path): Filename to write the HTML output to
+        data:     List of Dicts with data
+        out_file: Filename to write the HTML output to
     """
     ignored_rows = ["status", "global-label", "send-deny-packet"]
     table = '<table class="table table-bordered">\n'
@@ -41,6 +41,7 @@ def write_policy_to_html(data: List[Dict[str, Any]], out_file: Path) -> None:
     for header in headers:
         if header not in ignored_rows:
             table += f"<th>{header}</th>\n"
+
     table += '</tr><thead><tbody id="myTable">\n'
 
     # Create the table's row data
diff --git a/fotoobo/helpers/result.py b/fotoobo/helpers/result.py
index 36baf90..1c0f820 100644
--- a/fotoobo/helpers/result.py
+++ b/fotoobo/helpers/result.py
@@ -59,9 +59,7 @@ def push_result(self, key: str, data: T, successful: bool = True) -> None:
             data:       The output data for this key
             successful: Whether the call has been successful or not [default: True]
         """
-
         self.results[key] = data
-
         if successful:
             self.successful.append(key)
 
@@ -73,12 +71,11 @@ def push_message(self, host: str, message: str, level: str = "info") -> None:
         Add a message for the host
 
         Args:
-            host:       The host to add the message for
-            message:    The message to add
-            level:      The level to assign to this message, used for later filtering
-                        (use for example "info", "warning", "error")
+            host:    The host to add the message for
+            message: The message to add
+            level:   The level to assign to this message, used for later filtering
+                     (use for example "info", "warning", "error")
         """
-
         if host not in self.messages:
             self.messages[host] = []
 
@@ -89,7 +86,7 @@ def get_messages(self, host: str) -> List[Dict[str, str]]:
         Return all the messages for the host given
 
         Args:
-            host:   The host to get the messages for
+            host: The host to get the messages for
 
         Returns:
             A list of the messages pushed for this host. If there are no messages for this host, it
@@ -109,7 +106,6 @@ def print_messages(self, only_host: Union[str, None] = None) -> None:
             only_host:  Only print the messages for host only_host. If None is given, print all
                         messages.
         """
-
         out_messages = []
 
         for host, _messages in self.messages.items():
@@ -124,8 +120,9 @@ def print_messages(self, only_host: Union[str, None] = None) -> None:
     def get_result(self, host: str) -> T:
         """
         Return the result pushed by this
+
         Args:
-            host:   The name of the host to retrieve the result for
+            host: The name of the host to retrieve the result for
 
         Returns:
             The results stored before with push_results, or None if the host does not exist
@@ -133,7 +130,6 @@ def get_result(self, host: str) -> T:
         Raises:
             GeneralWarning: If there is no result for host
         """
-
         if host not in self.results:
             raise GeneralWarning(f"Host {host} is not in results.")
 
@@ -144,13 +140,9 @@ def all_results(self) -> Dict[str, T]:
         Return all results
 
         Returns:
-            The results as a dictionary of the following form::
-
-                {
-                    '<name of the host>': <data>
-                }
-
-            where `<data>` may be of any type
+            The results as a dictionary of the following form:
+                { '<name of the host>': <data> }
+            where <data> may be of any type
         """
         return self.results
 
@@ -164,9 +156,9 @@ def print_result_as_table(
         Print a table from given data as list or dict.
 
         Args:
-            title:          Set the preferred title for the table
-            auto_header:    Whether to show the headers (default: off)
-            headers:        Set the headers (if needed)
+            title:       Set the preferred title for the table
+            auto_header: Whether to show the headers (default: off)
+            headers:     Set the headers (if needed)
 
         Raises:
             GeneralWarning: If the data cannot be interpreted as a table
@@ -195,10 +187,10 @@ def print_table_raw(
         Print the data given as a rich table to the console
 
         Args:
-            data:           The data to print formatted as rich.table.Table will expect it
-            headers:        The headers for the table
-            auto_header:    Whether to show the headers or not
-            title:          The title for the table
+            data:        The data to print formatted as rich.table.Table will expect it
+            headers:     The headers for the table
+            auto_header: Whether to show the headers or not
+            title:       The title for the table
         """
         if not isinstance(data, list):
             raise GeneralWarning("data for print_table_raw must be a list of dicts.")
@@ -221,6 +213,7 @@ def print_table_raw(
             for entry in _values:
                 if isinstance(entry, (dict, list)):
                     values.append(json.dumps(entry, indent=4))
+
                 else:
                     values.append(str(entry))
 
@@ -228,13 +221,13 @@ def print_table_raw(
 
         self.console.print(table)
 
-    def print_raw(self, key: Union[str, None] = None) -> None:
+    def print_raw(self, key: Optional[str] = None) -> None:
         """
         Print the raw data from Result() in pretty format.
 
         Args:
-            key:    Print only the result for the host given
-                    (default: print all results)
+            key: Print only the result for the host given
+                 (default: print all results)
         """
         if key:
             data = {key: self.get_result(key)}
@@ -253,9 +246,9 @@ def save_with_template(self, host: str, template_file: Path, output_file: Path)
         the docs of the used utility to see what variables you're intended to use.
 
         Args:
-            data: The data used in the template
+            data:          The data used in the template
             template_file: Filename of the Jinja2 template file
-            output_file: The file to write the output to
+            output_file:   The file to write the output to
         """
         template_env = jinja2.Environment(
             loader=jinja2.FileSystemLoader(template_file.parent), trim_blocks=True, autoescape=True
@@ -285,7 +278,6 @@ def send_messages_as_mail(
                             output
         """
         out_messages: List[str] = []
-
         for host, messages in self.messages.items():
             for message in messages:
                 if not levels or message["level"] in levels:
diff --git a/fotoobo/helpers/vault.py b/fotoobo/helpers/vault.py
index 3dc35a5..1d978d3 100644
--- a/fotoobo/helpers/vault.py
+++ b/fotoobo/helpers/vault.py
@@ -86,13 +86,13 @@ def get_data(self, timeout: int = 3) -> Any:
         """Get data from the key/value store
 
         Args:
-            timeout:    The time before a request to the vault is cancelled
+            timeout: The time before a request to the vault is cancelled
 
         Returns:
-            The date from the vault or the error that occured
+            The date from the vault or the error that occurred
 
         Raises:
-            GeneralError: If no token could be retreived
+            GeneralError: If no token could be retrieved
         """
         if not self.token and not self.get_token():
             error_message = "Unable to get vault token"
@@ -111,7 +111,7 @@ def get_data(self, timeout: int = 3) -> Any:
             log.debug("Response status_code is '%s'", response.status_code)
             return {"ok": response.json()}
 
-        log.warning("Resonse is '%s %s'", response.status_code, response.reason)
+        log.warning("Response is '%s %s'", response.status_code, response.reason)
         return {
             "error": {
                 "status_code": response.status_code,
@@ -130,9 +130,11 @@ def get_token(self, timeout: int = 3) -> bool:
         log.debug("Get new token from '%s'", url)
         data = {"role_id": self.role_id, "secret_id": self.secret_id}
         self.token = ""
+
         try:
             response = requests.post(url, data=data, timeout=timeout, verify=self.ssl_verify)
             log.debug("Response status_code is '%s'", response.status_code)
+
             if response.ok:
                 self.token = response.json()["auth"]["client_token"]
                 if self.token_file:
@@ -178,7 +180,7 @@ def validate_token(self, timeout: int = 3) -> bool:
 
         Validate the Vault token against the Vault service. If the token ttl is lower then the
         token_ttl_limit the token is cleared. This prevents a token with ttl short before 0 to be
-        used in future calls. Instead a new token should be requestsed.
+        used in future calls. Instead a new token should be requested.
 
         Args:
             timeout: The time before a request to the Vault service is cancelled
@@ -189,11 +191,13 @@ def validate_token(self, timeout: int = 3) -> bool:
         url = f"{self.url}/v1/auth/token/lookup-self"
         log.debug("Check if vault token still is valid")
         headers = {"X-Vault-Token": self.token}
+
         try:
             response = requests.get(
                 url=url, headers=headers, timeout=timeout, verify=self.ssl_verify
             )
             log.debug("Response status_code is '%s'", response.status_code)
+
             if response.ok:
                 log.debug("Vault token is valid for '%s' seconds", response.json()["data"]["ttl"])
                 log.debug("vault_client_token: '%s...%s'", self.token[:8], self.token[-5:-1])
diff --git a/fotoobo/inventory/__init__.py b/fotoobo/inventory/__init__.py
index 35fcf07..eab7665 100644
--- a/fotoobo/inventory/__init__.py
+++ b/fotoobo/inventory/__init__.py
@@ -1,8 +1,6 @@
 """
 init.py
 """
-
-
 from .generic import GenericDevice
 from .inventory import Inventory
 
diff --git a/fotoobo/inventory/generic.py b/fotoobo/inventory/generic.py
index 4c0b52e..b4aae06 100644
--- a/fotoobo/inventory/generic.py
+++ b/fotoobo/inventory/generic.py
@@ -1,8 +1,6 @@
 """
 A module for defining a generic device
 """
-
-
 from typing import Union
 
 
@@ -15,7 +13,9 @@ class GenericDevice:
     """
 
     def __init__(self, **kwargs: Union[str, int, bool]) -> None:
+        """init"""
         for key, value in kwargs.items():
             setattr(self, key, value)
+
         self.hostname = getattr(self, "hostname", "")
         self.type = getattr(self, "type", "generic")
diff --git a/fotoobo/inventory/inventory.py b/fotoobo/inventory/inventory.py
index 3e8d6ac..db012e1 100644
--- a/fotoobo/inventory/inventory.py
+++ b/fotoobo/inventory/inventory.py
@@ -1,7 +1,6 @@
 """
 Devices class for storing device information
 """
-
 import logging
 import re
 from pathlib import Path
@@ -67,19 +66,20 @@ def get(
         Get a dictionary of assets from the inventory with given 'filters'.
 
         Args:
-            name:   Which asset to get. If blank get every asset. Wildcard * is supported in any
-                    position. E.g. "FortiGate", "*Gate", "Forti*ate", "Forti*".
-            type:   Which asset type to get. If blank get every asset.
+            name: Which asset to get. If blank get every asset. Wildcard * is supported in any
+                  position. E.g. "FortiGate", "*Gate", "Forti*ate", "Forti*".
+            type: Which asset type to get. If blank get every asset.
 
         Returns:
             Dictionary of assets with name as key
 
         Raises:
-            GeneralWarning if no asset was found in the inventory that matches name or type
+            GeneralWarning: If no asset was found in the inventory that matches name or type
         """
-        log.debug("getting assets with name '%s' and type '%s'", name, type)
+        log.debug("Getting assets with name '%s' and type '%s'", name, type)
         name_pattern = f"^{name}$".replace("*", ".*")
         assets = {}
+
         for _name, _asset in self.assets.items():
             if not name and not type:
                 assets[_name] = _asset
@@ -108,17 +108,18 @@ def get_item(
         specify the desired type and a GeneralWarning is raised if the type does not match.
 
         Args:
-            name:   Which exact asset to get.
-            type:   If you specify a type it is checked if it matches the type of the asset
+            name: Which exact asset to get.
+            type: If you specify a type it is checked if it matches the type of the asset
 
         Returns:
             Inventory asset
 
         Raises:
-            GeneralWarning if the asset was not found in the inventory
-            GeneralWarning if the specified type does not match the type of the item
+            GeneralWarning: If the asset was not found in the inventory
+            GeneralWarning: If the specified type does not match the type of the item
         """
-        log.debug("getting asset with name '%s'", name)
+        log.debug("Getting asset with name '%s'", name)
+
         try:
             asset = self.assets[name]
 
@@ -139,7 +140,7 @@ def _load_inventory(self) -> None:
         log.debug("Load the assets from the inventory file")
         # Expand user home shortcuts in the inventory file path
         expanded_inventory_file = self._inventory_file.expanduser()
-        log.debug("loading assets from '%s'", expanded_inventory_file)
+        log.debug("Loading assets from '%s'", expanded_inventory_file)
         inventory_raw: Dict[str, Any] = dict(load_yaml_file(expanded_inventory_file) or {})
 
         # Set the globals
@@ -160,6 +161,7 @@ def _load_inventory(self) -> None:
             if asset.get("type", "") == "fortigate":
                 try:
                     self.assets[name] = FortiGate(**asset)
+
                 except GeneralWarning as err:
                     log.warning("%s: %s", name, err)
 
@@ -192,7 +194,11 @@ def _load_inventory(self) -> None:
     """
 
     def _load_data_from_vault(self, vault_dict: Dict[str, Any]) -> None:
-        """Load the credentials from a vault"""
+        """Load the credentials from a vault
+
+        Args:
+            vault_dict: The Dictionary with the vault configuration
+        """
         log.debug("Loading credentials from vault '%s'", vault_dict["url"])
         vault = Client(**vault_dict)
         data = vault.get_data()
@@ -209,6 +215,7 @@ def _replace_with_vault_data(self) -> None:
                             log.debug(
                                 "Vault attribute '%s.%s' replaced successfully", name, attribute
                             )
+
                         except KeyError:
                             log.warning("Vault attribute '%s.%s' not found", name, attribute)
 
@@ -217,8 +224,7 @@ def _set_globals(self, data: Dict[str, Any]) -> None:
         Set some defaults for device types
 
         Args:
-            data:   defaults by device where key is the device type and value defines
-                    its defaults
+            data: defaults by device where key is the device type and value defines its defaults
         """
         for key, value in data.items():
             self._globals[key] = value
diff --git a/fotoobo/main.py b/fotoobo/main.py
index 307dc8d..d230f60 100755
--- a/fotoobo/main.py
+++ b/fotoobo/main.py
@@ -1,8 +1,8 @@
 """
 This is the main project entry point.
 
-When invoking fotoobo it starts the main() function in this file. It's main purpose is to start
-the typer cli with app().
+When invoking fotoobo it starts the main() function in this file. Its main purpose is to start the
+typer cli with app().
 The second task is to catch all exceptions and print a friendly message on the screen instead of
 a traceback. The traceback is written to a traceback.log file in the local directory for debug
 purposes.
@@ -23,12 +23,15 @@ def main() -> None:
     """
     try:
         app()
-    except (GeneralError, APIError) as err:  # pragma: no cover
-        print(f"Error: {err.message}")
-        sys.exit(40)
+
     except GeneralWarning as warn:  # pragma: no cover
         print(f"Warning: {warn.message}")
         sys.exit(30)
+
+    except (GeneralError, APIError) as err:  # pragma: no cover
+        print(f"Error: {err.message}")
+        sys.exit(40)
+
     except Exception:  # pylint: disable=broad-except # pragma: no cover
         print("oops, something did not work as expected. See traceback.log for more info")
         with open("traceback.log", "w", encoding="UTF-8") as exc_file:
diff --git a/fotoobo/tools/__init__.py b/fotoobo/tools/__init__.py
index f4a32e6..93ba6f7 100644
--- a/fotoobo/tools/__init__.py
+++ b/fotoobo/tools/__init__.py
@@ -5,7 +5,6 @@
 relevant fotoobo and Fortinet modules. By default the tools functions are invoked by the cli app,
 but they may also be accessed directly.
 """
-
 from . import convert, ems, faz, fgt, fmg, get
 from .greet import greet
 
diff --git a/fotoobo/tools/convert.py b/fotoobo/tools/convert.py
index f30359e..574fe33 100644
--- a/fotoobo/tools/convert.py
+++ b/fotoobo/tools/convert.py
@@ -1,7 +1,6 @@
 """
 The fotoobo converter utility
 """
-
 import logging
 from pathlib import Path
 from typing import Any, Dict, List, Optional, Union
@@ -24,22 +23,20 @@ def checkpoint(
 
     Args:
         checkpoint_assets: The assets to convert
-        obj_type (str): the type of asset to convert
-        conversion_id: An ID to the conversion. This is needed to cache different conversion tasks
-        cache_dir (str, optional): The cache directory to use. Defaults to None.
+        obj_type:          The type of asset to convert
+        conversion_id:     An ID to the conversion. Needed to cache different conversion tasks
+        cache_dir:         The cache directory to use. Defaults to None.
     """
-    log.info("start converting checkpoint assets of type %s", obj_type)
-
+    log.info("Start converting checkpoint assets of type '%s'", obj_type)
     result = Result[List[Any]]()
 
     if cache_dir:
         create_dir(cache_dir)
         cache_file = Path(cache_dir, conversion_id)
+
     else:
         cache_file = None
 
     converter = CheckpointConverter(checkpoint_assets, cache_file)
-
     result.push_result("fortinet_assets", converter.convert(obj_type))
-
     return result
diff --git a/fotoobo/tools/ems/__init__.py b/fotoobo/tools/ems/__init__.py
index 562f691..b2dab0e 100644
--- a/fotoobo/tools/ems/__init__.py
+++ b/fotoobo/tools/ems/__init__.py
@@ -1,7 +1,6 @@
 """
 ems tools
 """
-
 from fotoobo.tools.ems import get, monitor
 
 __all__ = ["get", "monitor"]
diff --git a/fotoobo/tools/ems/get.py b/fotoobo/tools/ems/get.py
index 8b593df..c82d1ea 100644
--- a/fotoobo/tools/ems/get.py
+++ b/fotoobo/tools/ems/get.py
@@ -17,21 +17,18 @@ def version(host: str) -> Result[str]:
     ems get version
 
     Args:
-        host (str): host defined in inventory
+        host: Host defined in inventory
 
     Returns:
-        Result[Dict[str, str]]: version data in a dict with keys: host, version
+        Version data in a dict with keys: host, version
     """
     result = Result[str]()
-
     inventory = Inventory(config.inventory_file)
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     log.debug("FortiClient EMS get version ...")
     ems.login()
     ems_version = ems.get_version()
-
     result.push_result(host, f"v{ems_version}")
-
     return result
 
 
@@ -40,21 +37,19 @@ def workgroups(host: str, custom: bool = False) -> Result[List[Dict[str, str]]]:
     ems get workgroups
 
     Args:
-        host (str): host defined in inventory
-        custom (bool): if true it only returns custom groups
+        host:   Host defined in inventory
+        custom: If true it only returns custom groups
 
     Returns:
-        List[Dict[str, str]]: workgroups data in a list of dict with keys: name, id, total_devices
+        Workgroups data in a list of dict with keys: name, id, total_devices
     """
     result = Result[List[Dict[str, str]]]()
-
     inventory = Inventory(config.inventory_file)
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
-
     log.debug("FortiClient EMS get workgroups ...")
     ems.login()
-
     raw_data = ems.api("get", f"/workgroups/index?custom={custom}").json()["data"]
+
     for entry in raw_data:
         result.push_result(entry["name"], entry["total_devices"])
 
diff --git a/fotoobo/tools/ems/monitor.py b/fotoobo/tools/ems/monitor.py
index 1512f40..7bc66c3 100644
--- a/fotoobo/tools/ems/monitor.py
+++ b/fotoobo/tools/ems/monitor.py
@@ -1,7 +1,6 @@
 """
 FortiClient EMS monitor module
 """
-
 import logging
 from datetime import datetime
 from typing import Any, Dict
@@ -23,25 +22,22 @@ def connections(host: str) -> Result[Dict[str, Any]]:
     returned dict.
 
     Args:
-        host (str): FortiClient EMS host defined in the inventory
+        host: FortiClient EMS host defined in the inventory
 
-    Returns: Result[Dict[str, Any]]
+    Returns:
+        Result
     """
     result = Result[Dict[str, Any]]()
     inventory = Inventory(config.inventory_file)
-
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
-
     response = ems.api("get", "/endpoints/connection/donut")
-
     data: Dict[str, Any] = {"data": list(response.json()["data"]), "fotoobo": {}}
 
     for item in data["data"]:
         data["fotoobo"][item["token"]] = item["value"]
 
     result.push_result(host, data)
-
     return result
 
 
@@ -57,32 +53,29 @@ def endpoint_management_status(host: str) -> Result[Dict[str, Any]]:
         - {{ fotoobo.unmanaged }}   Amount of unmanaged endpoints
 
     Args:
-        host (str): FortiClient EMS host defined in the inventory
+        host: FortiClient EMS host defined in the inventory
 
-    Returns: Result
+    Returns:
+        Result
     """
     result = Result[Dict[str, Any]]()
     inventory = Inventory(config.inventory_file)
-
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
-
     response = ems.api("get", "/endpoints/management/donut")
-
     data = {"data": dict(response.json())["data"]}
-
     managed = unmanaged = 0
+
     for item in data["data"]:
         if item["token"] == "managed":
             managed = item["value"]
-            log.debug("management: managed: %s", managed)
+            log.debug("Management: managed: '%s'", managed)
 
         if item["token"] == "unmanaged":
             unmanaged = item["value"]
-            log.debug("management: unmanaged: %s", unmanaged)
+            log.debug("Management: unmanaged: '%s'", unmanaged)
 
     data["fotoobo"] = {"managed": managed, "unmanaged": unmanaged}
-
     result.push_result(host, data)
     return result
 
@@ -98,24 +91,21 @@ def endpoint_online_outofsync(host: str) -> Result[Dict[str, Any]]:
             is not in synch with FortiClient EMS
 
     Args:
-        host (str): FortiClient EMS host defined in the inventory
+        host: FortiClient EMS host defined in the inventory
 
-    Returns: Result
+    Returns:
+        Result
     """
     result = Result[Dict[str, Any]]()
     inventory = Inventory(config.inventory_file)
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
-
     response = ems.api(
         "get", "/endpoints/index?offset=0&count=1&connection=online&status=outofsync"
     )
-
     data = {"fotoobo": {"outofsync": response.json()["data"]["total"]}}
-    log.debug("endpoints outofsync: %s", data["fotoobo"]["outofsync"])
-
+    log.debug("Endpoints outofsync: '%s'", data["fotoobo"]["outofsync"])
     result.push_result(host, data)
-
     return result
 
 
@@ -132,16 +122,15 @@ def endpoint_os_versions(host: str) -> Result[Dict[str, Dict[str, Any]]]:
         - {{ fotoobo.fctversionwindows }}   Amount of managed windows endpoints
 
     Args:
-        host (str): FortiClient EMS host defined in the inventory
+        host: FortiClient EMS host defined in the inventory
 
-    Returns: Result[Dict[str, Dict[str, Any]]]
+    Returns:
+        Result
     """
     result = Result[Dict[str, Dict[str, Any]]]()
     inventory = Inventory(config.inventory_file)
-
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
-
     data: Dict[str, Any] = {"data": {}, "fotoobo": {}}
 
     for fctversion_os in ["fctversionwindows", "fctversionmac", "fctversionlinux"]:
@@ -151,7 +140,6 @@ def endpoint_os_versions(host: str) -> Result[Dict[str, Dict[str, Any]]]:
         data["fotoobo"][fctversion_os] = count
 
     result.push_result(host, data)
-
     return result
 
 
@@ -160,26 +148,24 @@ def system(host: str) -> Result[Dict[str, Any]]:
     Get system information from FortiClient EMS.
 
     Args:
-        host (str): FortiClient EMS host defined in inventory
+        host: FortiClient EMS host defined in inventory
 
-    Returns: Result[Dict[str, Any]]
+    Returns:
+        Result
     """
     result = Result[Dict[str, Any]]()
     inventory = Inventory(config.inventory_file)
-
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
 
     # get EMS serial number (just for debug logging and because it's possible)
     response = ems.api("get", "/system/serial_number")
-    log.debug("serial number: %s (from /system/serial_number)", response.json()["data"])
+    log.debug("Serial number: '%s' (from /system/serial_number)", response.json()["data"])
 
     # get EMS system info
     response = ems.api("get", "/system/info/")
-    log.debug("serial number: %s (from /system/info/)", response.json()["data"]["license"]["sn"])
-
+    log.debug("Serial number: '%s' (from /system/info/)", response.json()["data"]["license"]["sn"])
     result.push_result(host, dict(response.json()["data"]))
-
     return result
 
 
@@ -208,39 +194,39 @@ def license(host: str) -> Result[Dict[str, Any]]:  # pylint: disable=redefined-b
             If you wish more granular view this utility has to be improved accordingly.
 
     Args:
-        host (str): FortiClient EMS host defined in the inventory
+        host: FortiClient EMS host defined in the inventory
 
-    Returns: Result
+    Returns:
+        Result
     """
     result = Result[Dict[str, Any]]()
     inventory = Inventory(config.inventory_file)
     ems: FortiClientEMS = inventory.get_item(host, "forticlientems")
     ems.login()
-
     response = ems.api("get", "/license/get")
     data = {}
     data["data"] = dict(response.json()["data"])
-
     license_expiry_days = 0
+
     for lic in data["data"]["licenses"]:
-        log.debug("license expiry for '%s': '%s'", lic["type"], lic["expiry_date"])
+        log.debug("License expiry for '%s': '%s'", lic["type"], lic["expiry_date"])
         license_expiry = datetime.strptime(lic["expiry_date"], "%Y-%m-%dT%H:%M:%S")
         expiry_days = int((license_expiry - datetime.now()).days)
+
         if expiry_days < license_expiry_days or license_expiry_days == 0:
             license_expiry_days = expiry_days
-    log.debug("days to license expiry: %s", license_expiry_days)
 
+    log.debug("Days to license expiry: '%s'", license_expiry_days)
     data["fotoobo"] = {}
     data["fotoobo"]["license_expiry_days"] = license_expiry_days
 
     for key in data["data"]["seats"]:
         if data["data"]["seats"][key] > 0:
-            log.debug(f"{key} license count: %s", data["data"]["seats"][key])
-            log.debug(f"{key} license used: %s", data["data"]["used"][key])
+            log.debug(f"{key} license count: '%s'", data["data"]["seats"][key])
+            log.debug(f"{key} license used: '%s'", data["data"]["used"][key])
             license_usage = int(100 / data["data"]["seats"][key] * data["data"]["used"][key])
-            log.debug(f"{key} license usage : %s%%", license_usage)
+            log.debug(f"{key} license usage : '%s%%'", license_usage)
             data["fotoobo"][key + "_usage"] = license_usage
 
     result.push_result(host, data)
-
     return result
diff --git a/fotoobo/tools/faz/__init__.py b/fotoobo/tools/faz/__init__.py
index 85adfbb..d1915ef 100644
--- a/fotoobo/tools/faz/__init__.py
+++ b/fotoobo/tools/faz/__init__.py
@@ -1,7 +1,6 @@
 """
 faz tools
 """
-
 from . import get
 
 __all__ = ["get"]
diff --git a/fotoobo/tools/faz/get.py b/fotoobo/tools/faz/get.py
index 312cd1c..861938d 100644
--- a/fotoobo/tools/faz/get.py
+++ b/fotoobo/tools/faz/get.py
@@ -1,7 +1,6 @@
 """
 FortiAnalyzer get version utility
 """
-
 import logging
 
 from fotoobo.helpers.config import config
@@ -16,23 +15,20 @@ def version(host: str) -> Result[str]:
     FortiAnalyzer get version
 
     Args:
-        host (str): host defined in inventory
+        host: Host defined in inventory
+
+    Returns:
+        The version string per FAZ
 
     Raises:
         GeneralWarning: GeneralWarning
-
-    Returns:
-        Result[str]: The version string per FAZ
     """
     result = Result[str]()
-
     inventory = Inventory(config.inventory_file)
     assets = inventory.get(host, "fortianalyzer")
     log.debug("FortiAnalyzer get version ...")
     assets[host].login()
     faz_version = assets[host].get_version()
     assets[host].logout()
-
     result.push_result(host, faz_version)
-
     return result
diff --git a/fotoobo/tools/fgt/__init__.py b/fotoobo/tools/fgt/__init__.py
index 5ebfccb..9273073 100644
--- a/fotoobo/tools/fgt/__init__.py
+++ b/fotoobo/tools/fgt/__init__.py
@@ -1,7 +1,6 @@
 """
 fgt tools
 """
-
 from . import config, get, monitor
 from .main import backup
 
diff --git a/fotoobo/tools/fgt/config.py b/fotoobo/tools/fgt/config.py
index 54f2657..e80fbf0 100644
--- a/fotoobo/tools/fgt/config.py
+++ b/fotoobo/tools/fgt/config.py
@@ -1,7 +1,6 @@
 """
 FortiGate configuration check utility
 """
-
 import logging
 from pathlib import Path
 from typing import Any, List
@@ -30,10 +29,11 @@ def check(config: Path, bundles: Path) -> Result[List[str]]:
 
     Raises:
         GeneralWarning: GeneralWarning
-        GeneralError: GeneralError
+        GeneralError:   GeneralError
     """
     files: List[Path] = []
     config = Path(config)
+
     if config.is_file():
         files.append(config)
 
@@ -42,19 +42,19 @@ def check(config: Path, bundles: Path) -> Result[List[str]]:
         files = [file for file in config.iterdir() if file.suffix == ".conf"]
 
     else:
-        log.error("no valid configuration file")
+        log.error("No valid configuration file")
 
     if not files:
-        log.warning("there are no configuration files to check")
-        raise GeneralWarning("there are no configuration files to check")
+        log.warning("There are no configuration files to check")
+        raise GeneralWarning("There are no configuration files to check")
 
     bundles = Path(bundles)
     if bundles.is_file():
         checks = load_yaml_file(bundles)
 
     else:
-        log.error("no valid bundle file")
-        raise GeneralError("no valid bundle file")
+        log.error("No valid bundle file")
+        raise GeneralError("No valid bundle file")
 
     total_results: int = 0
     result = Result[List[str]]()
@@ -71,10 +71,10 @@ def check(config: Path, bundles: Path) -> Result[List[str]]:
         conf_check.execute_checks()
 
         num_results = len(result.get_messages(fortigate_config.info.hostname))
-        log.info("all checks in '%s' done with '%s' messages", file.name, num_results)
+        log.info("All checks in '%s' done with '%s' messages", file.name, num_results)
         total_results += num_results
 
-    log.info("all checks done with '%s' messages", total_results)
+    log.info("All checks done with '%s' messages", total_results)
 
     if total_results == 0:
         result.push_message("fotoobo", "There were no errors in the configuration file(s)")
@@ -87,11 +87,11 @@ def get(config: Path, scope: str = "", path: str = "") -> Result[FortiGateInfo]:
     The FortiGate get configuration utility.
 
     Args:
-        config (Path):  The configuration to get the information from (either a file or directory)
-                        in case it's a directory all .conf files in it will be checked.
+        config: The configuration to get the information from (either a file or directory)
+                In case it's a directory all .conf files in it will be checked.
 
     Returns:
-        result: configuration as result object
+        Configuration as result object
 
     Raises:
         GeneralWarning: GeneralWarning
@@ -105,8 +105,8 @@ def get(config: Path, scope: str = "", path: str = "") -> Result[FortiGateInfo]:
         files = [file for file in config.iterdir() if file.is_file() and file.suffix == ".conf"]
 
     if not files:
-        log.warning("there are no configuration files")
-        raise GeneralWarning("there are no configuration files")
+        log.warning("There are no configuration files")
+        raise GeneralWarning("There are no configuration files")
 
     result = Result[Any]()
 
@@ -123,11 +123,11 @@ def info(config: Path) -> Result[FortiGateInfo]:
     The FortiGate configuration information utility.
 
     Args:
-        config (Path):  The configuration to get the information from (either a file or directory)
-                        in case it's a directory all .conf files in it will be checked.
+        config: The configuration to get the information from (either a file or directory)
+                In case it's a directory all .conf files in it will be checked.
 
     Returns:
-        result: FortiGate information as result object
+        FortiGate information as result object
 
     Raises:
         GeneralWarning: GeneralWarning
@@ -141,8 +141,8 @@ def info(config: Path) -> Result[FortiGateInfo]:
         files = [file for file in config.iterdir() if file.is_file() and file.suffix == ".conf"]
 
     if not files:
-        log.warning("there are no configuration files")
-        raise GeneralWarning("there are no configuration files")
+        log.warning("There are no configuration files")
+        raise GeneralWarning("There are no configuration files")
 
     result = Result[FortiGateInfo]()
 
diff --git a/fotoobo/tools/fgt/get.py b/fotoobo/tools/fgt/get.py
index 812bf50..9110dda 100644
--- a/fotoobo/tools/fgt/get.py
+++ b/fotoobo/tools/fgt/get.py
@@ -1,7 +1,6 @@
 """
 FortiGate get version utility
 """
-
 import concurrent.futures
 import logging
 from typing import Optional, Tuple
@@ -23,8 +22,8 @@ def version(host: Optional[str] = None) -> Result[str]:
     Get the version(s) of one ore more FortiGates.
 
     Args:
-        host:   The host from the inventory to get the version. If you omit host, it will run over
-                all FortiGates in the inventory.
+        host: The host from the inventory to get the version. If you omit host, it will run over
+              all FortiGates in the inventory.
 
     Returns:
         The Result object with all the results
@@ -37,16 +36,17 @@ def _get_single_version(name: str, fgt: FortiGate) -> Tuple[str, str]:
         version number status and returns it.
 
         Args:
-            name:   The name of the FortiGate (as defined in the inventory)
-            fgt:    The FortiGate object to query
+            name: The name of the FortiGate (as defined in the inventory)
+            fgt:  The FortiGate object to query
 
         Returns:
             name:   The name of the FortiGate (as defined in the inventory)
             status: The HA status of the FortiGate (fgt)
         """
-        log.debug("getting FortiGate version for %s", name)
+        log.debug("Getting FortiGate version for '%s'", name)
         try:
             fortigate_version = fgt.get_version()
+
         except (GeneralWarning, GeneralError) as exception:
             fortigate_version = f"unknown due to {exception.message}"
 
@@ -54,7 +54,6 @@ def _get_single_version(name: str, fgt: FortiGate) -> Tuple[str, str]:
 
     inventory = Inventory(config.inventory_file)
     fgts = inventory.get(host, "fortigate")
-
     result = Result[str]()
 
     with Progress() as progress:
diff --git a/fotoobo/tools/fgt/main.py b/fotoobo/tools/fgt/main.py
index 7dc276d..ee9dbb8 100644
--- a/fotoobo/tools/fgt/main.py
+++ b/fotoobo/tools/fgt/main.py
@@ -4,7 +4,7 @@
 import concurrent.futures
 import json
 import logging
-from typing import Tuple, Union
+from typing import Optional, Tuple
 
 from rich.progress import Progress
 
@@ -18,14 +18,14 @@
 
 
 def backup(
-    host: Union[str, None] = None,
+    host: Optional[str] = None,
 ) -> Result[str]:
     """
     Create a FortiGate configuration backup into a file and optionally upload it to an FTP server.
 
     Args:
-        host:   The host from the inventory to get the backup. If no host is given all
-                FortiGate devices in the inventory are backed up.
+        host: The host from the inventory to get the backup. If no host is given all FortiGate
+              devices in the inventory are backed up.
 
     Returns:
         The Result object with all the results
@@ -41,25 +41,26 @@ def _get_single_backup(name: str, fgt: FortiGate) -> Tuple[str, str]:
         configuration backup and returns it.
 
         Args:
-            name:   The name of the FortiGate (as defined in the inventory)
-            fgt:    The FortiGate object to query
+            name: The name of the FortiGate (as defined in the inventory)
+            fgt:  The FortiGate object to query
 
         Returns:
-            name:   The name of the FortiGate (as defined in the inventory)
-            data:   The configuration backup of the FortiGate (fgt)
+            name: The name of the FortiGate (as defined in the inventory)
+            data: The configuration backup of the FortiGate (fgt)
         """
-        log.debug("backup FortiGate '%s'", name)
+        log.debug("Backup FortiGate '%s'", name)
         data: str = ""
+
         try:
             data = fgt.backup()
             if data.startswith("#config-version"):
-                message = f"config backup for '{name}' succeeded"
+                message = f"Config backup for '{name}' succeeded"
                 log.info(message)
                 result.push_message(name, message)
 
             else:
                 data_json = json.loads(data)
-                message = f"backup '{name}' failed with error '{data_json['http_status']}'"
+                message = f"Backup '{name}' failed with error '{data_json['http_status']}'"
                 log.error(message)
                 result.push_message(name, message, level="error")
 
@@ -72,7 +73,7 @@ def _get_single_backup(name: str, fgt: FortiGate) -> Tuple[str, str]:
         return name, data
 
     with Progress() as progress:
-        task = progress.add_task("getting FortiGate versions...", total=len(fgts))
+        task = progress.add_task("Getting FortiGate versions...", total=len(fgts))
         with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
             futures = []
             for name, fgt in fgts.items():
diff --git a/fotoobo/tools/fgt/monitor.py b/fotoobo/tools/fgt/monitor.py
index aff004a..fb2306a 100644
--- a/fotoobo/tools/fgt/monitor.py
+++ b/fotoobo/tools/fgt/monitor.py
@@ -1,7 +1,6 @@
 """
 FortiGate check hamaster utility
 """
-
 import concurrent.futures
 import logging
 from typing import Dict, Tuple
@@ -25,8 +24,8 @@ def hamaster(host: str) -> Result[str]:  # pylint: disable=too-many-locals
     search for the devices we found in Fortimanager in our inventory to connect to to them.
 
     Args:
-        host:   The FortiManager host from the inventory to get the device list from. If you omit
-                host, it will run over the default FortiManager (fmg).
+        host: The FortiManager host from the inventory to get the device list from. If you omit
+              host, it will run over the default FortiManager (fmg).
 
     Returns:
         The Result object with all the results
@@ -39,8 +38,8 @@ def _get_single_status(name: str, fgt: FortiGate) -> Tuple[str, str]:
         HA master status and returns it.
 
         Args:
-            name:   The name of the FortiGate (as defined in the inventory)
-            fgt:    The FortiGate object to query
+            name: The name of the FortiGate (as defined in the inventory)
+            fgt:  The FortiGate object to query
 
         Returns:
             name:   The name of the FortiGate (as defined in the inventory)
@@ -49,6 +48,7 @@ def _get_single_status(name: str, fgt: FortiGate) -> Tuple[str, str]:
         response = fgt.api("get", "/monitor/system/ha-checksums")
         ha_checksums = response.json()
         status: str = "is not the expected master"
+
         for node in ha_checksums["results"]:
             if node["serial_no"] == ha_checksums["serial"]:
                 if node["is_root_master"] == 1:
@@ -58,7 +58,6 @@ def _get_single_status(name: str, fgt: FortiGate) -> Tuple[str, str]:
 
     inventory = Inventory(config.inventory_file)
     fmg = inventory.get_item(host, "fortimanager")
-
     payload = {
         "method": "get",
         "params": [
@@ -73,9 +72,9 @@ def _get_single_status(name: str, fgt: FortiGate) -> Tuple[str, str]:
     fmg.login()
     response = fmg.api("post", payload=payload)
     fmg.logout()
-
     result = Result[str]()
     fgts: Dict[str, FortiGate] = {}
+
     for device in response.json()["result"][0]["data"]:
         if device["ha_mode"] == 1:
             expected_master = ""
@@ -96,11 +95,11 @@ def _get_single_status(name: str, fgt: FortiGate) -> Tuple[str, str]:
 
             # There is a KeyError if a designated cluster master is not defined in the inventory
             except KeyError:
-                log.debug("device %s not found in inventory", expected_master)
+                log.debug("Device '%s' not found in inventory", expected_master)
                 result.push_result(expected_master, "not found in inventory")
 
     with Progress() as progress:
-        task = progress.add_task("getting FortiGate HA status...", total=len(fgts))
+        task = progress.add_task("Getting FortiGate HA status...", total=len(fgts))
         with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
             futures = []
             for name, fgt in fgts.items():
diff --git a/fotoobo/tools/fmg/get.py b/fotoobo/tools/fmg/get.py
index ebcdbcd..e97b4f7 100644
--- a/fotoobo/tools/fmg/get.py
+++ b/fotoobo/tools/fmg/get.py
@@ -1,7 +1,6 @@
 """
 FortiManager get ADOMs utility
 """
-
 import logging
 from typing import Any, Dict, List, Optional, Union
 
@@ -18,17 +17,15 @@ def adoms(host: str) -> Result[str]:
     FortiManager get ADOMs
 
     Args:
-        host (str): the host from the inventory to get the ADOMs list from
+        host: The host from the inventory to get the ADOMs list from
 
     Returns:
-        list of dict: list of ADOMs where ADOM is a dict with keys: name, version
+        List of ADOMs where ADOM is a dict with keys: name, version
     """
     inventory = Inventory(config.inventory_file)
     fmg = inventory.get_item(host, "fortimanager")
     result = Result[str]()
-
     log.debug("FortiManager get adoms ...")
-
     fmg.login()
     fmg_adoms = fmg.get_adoms()
 
@@ -36,7 +33,6 @@ def adoms(host: str) -> Result[str]:
         result.push_result(adom["name"], f"{adom['os_ver']}.{adom['mr']}")
 
     fmg.logout()
-
     return result
 
 
@@ -46,10 +42,10 @@ def devices(host: str) -> Result[Dict[str, Union[str, List[str]]]]:
     In a cluster only the cluster device is returned, not the physical nodes
 
     Args:
-        host (str): the FortiManager from the inventory to get the Fortinet devices list from
+        host: The FortiManager from the inventory to get the Fortinet devices list from
 
     Returns:
-        list of dict: list of devices where
+        List of devices
     """
     inventory = Inventory(config.inventory_file)
     fmg = inventory.get_item(host, "fortimanager")
@@ -69,6 +65,7 @@ def devices(host: str) -> Result[Dict[str, Union[str, List[str]]]]:
     response = fmg.api("post", payload=payload)
     fmg.logout()
     result = Result[Dict[str, Union[str, List[str]]]]()
+
     for device in response.json()["result"][0]["data"]:
         data = {
             "version": f"{device['os_ver']}.{device['mr']}.{device['patch']}",
@@ -91,6 +88,15 @@ def policy(
 ) -> Result[List[Dict[str, Any]]]:
     """
     FortiManager get policy
+
+    Args:
+        host:
+        adom:
+        policy_name:
+        fields:
+
+    Returns:
+        Result
     """
     fields = fields or [
         "status",
@@ -135,7 +141,6 @@ def policy(
         policies.append({field: pol.get(field, None) for field in fields})
 
     fmg.logout()
-
     out_result = Result[List[Dict[str, Any]]]()
     out_result.push_result(host, policies)
     return out_result
@@ -146,10 +151,10 @@ def version(host: str) -> Result[str]:
     FortiManager get version
 
     Args:
-        host (str): the host from the inventory to get the version
+        host: The host from the inventory to get the version
 
     Returns:
-        Dict[str, str]: version data in a dict with keys: host, version
+        Version data in a dict with keys: host, version
     """
     inventory = Inventory(config.inventory_file)
     fmg = inventory.get_item(host, "fortimanager")
@@ -157,5 +162,4 @@ def version(host: str) -> Result[str]:
     fmg_version = fmg.get_version()
     result = Result[str]()
     result.push_result(host, fmg_version)
-
     return result
diff --git a/fotoobo/tools/fmg/main.py b/fotoobo/tools/fmg/main.py
index 1fa63f6..4215767 100644
--- a/fotoobo/tools/fmg/main.py
+++ b/fotoobo/tools/fmg/main.py
@@ -1,7 +1,6 @@
 """
 FortiManager assign utility
 """
-
 import logging
 from pathlib import Path
 
@@ -28,12 +27,13 @@ def assign(adoms: str, policy: str, host: str, timeout: int = 60) -> Result[str]
     result = Result[str]()
     inventory = Inventory(config.inventory_file)
     fmg = inventory.get_item(host, "fortimanager")
+    log.debug("Assigning global policy/objects to ADOM '%s'", adoms)
 
-    log.debug("Assigning global policy/objects to ADOM %s", adoms)
     task_id = fmg.assign_all_objects(adoms=adoms, policy=policy)
     if task_id > 0:
-        log.info("created FortiManager task id %s", task_id)
+        log.info("Created FortiManager task id '%s'", task_id)
         messages = fmg.wait_for_task(task_id, timeout=timeout)
+
         for message in messages:
             level = "debug" if message["state"] == 4 else "error"
             elapsed = (
@@ -42,12 +42,14 @@ def assign(adoms: str, policy: str, host: str, timeout: int = 60) -> Result[str]
                 else "unfinished"
             )
             result_message = f"{message['task_id']}: {message['name']}"
+
             if message["detail"]:
                 result_message += f" / {message['detail']}"
 
             result_message += f" ({elapsed})"
             getattr(log, level)(result_message)
             result.push_message(host, result_message, level)
+
             if message["history"]:
                 for line in message["history"]:
                     result_message = f"- {line['detail']}"
@@ -62,22 +64,24 @@ def post(file: Path, adom: str, host: str) -> Result[str]:
     POST the given configuration from a JSON file to the FortiManager
 
     Args:
-        file:   The configuration file to oad the configuration from
-        adom:   The ADOM to assign the global policy to
-        host:   The FortiManager defined in inventory
+        file: The configuration file to add the configuration from
+        adom: The ADOM to assign the global policy to
+        host: The FortiManager defined in inventory
+
+    Returns:
+        Result
 
     Raises:
         GeneralWarning
     """
     if not (payloads := load_json_file(file)):
-        raise GeneralWarning(f"there is no data in the given file ({file})")
+        raise GeneralWarning(f"There is no data in the given file ({file})")
 
     inventory = Inventory(config.inventory_file)
     result: Result[str] = Result()
     fmg = inventory.get_item(host, "fortimanager")
-
     log.debug("FortiManager post command ...")
-    log.info("start posting assets to '%s'", host + "/" + adom)
+    log.info("Start posting assets to '%s'", host + "/" + adom)
 
     result_list = fmg.post(adom, payloads)
     if result_list:
diff --git a/fotoobo/tools/get.py b/fotoobo/tools/get.py
index 0ebc2ff..890893f 100644
--- a/fotoobo/tools/get.py
+++ b/fotoobo/tools/get.py
@@ -20,9 +20,11 @@
 def inventory() -> Result[Dict[str, str]]:
     """
     Get the fotoobo inventory
-    """
-    log.debug("Printing fotoobo inventory information")
 
+    Returns:
+        Result
+    """
+    log.debug("Print fotoobo inventory information")
     result = Result[Dict[str, str]]()
     _inventory = Inventory(config.inventory_file)
 
@@ -37,10 +39,9 @@ def version(verbose: bool = False) -> Result[List[Dict[str, str]]]:
     Get the fotoobo version
 
     Args:
-        verbose:    Whether we want verbose output
+        verbose: Whether we want verbose output
     """
-    log.debug("printing fotoobo version information: %s", __version__)
-
+    log.debug("Print fotoobo version information: '%s'", __version__)
     result = Result[List[Dict[str, str]]]()
     versions = [{"module": "fotoobo", "version": __version__}]
 
@@ -51,7 +52,6 @@ def version(verbose: bool = False) -> Result[List[Dict[str, str]]]:
             versions.append({"module": module, "version": importlib.metadata.version(module)})
 
     result.push_result("version", versions)
-
     return result
 
 
@@ -62,7 +62,6 @@ def commands() -> Result[Tree]:
     are sorted in alphabetical order
     """
     result = Result[Tree]()
-
     result.push_result(
         "commands",
         walk_cli_info(
diff --git a/fotoobo/tools/greet.py b/fotoobo/tools/greet.py
index b15d8b4..889d203 100644
--- a/fotoobo/tools/greet.py
+++ b/fotoobo/tools/greet.py
@@ -4,7 +4,6 @@
 This function is a hidden fotoobo command which is meant for testing purposes. It has no functional
 effect. Use and modify it whenever you want. But be sure to also write the tests for it.
 """
-
 import logging
 
 import typer
@@ -16,8 +15,13 @@ def greet(name: str, bye: bool, log_enabled: bool) -> None:
     """
     This is the hidden Greeting function.
     It allows you to greet someone with different colors in different languages.
+
+    Args:
+        name:
+        bye:
+        log_enabled:
     """
-    log.debug("local logging option is: %s", log_enabled)
+    log.debug("Local logging option is: '%s'", log_enabled)
     greeting = f"{typer.style('🌼Aloha🌼', fg=typer.colors.GREEN)}"
     greeting += f", {typer.style('⚽Hola⚽', fg=typer.colors.YELLOW)}"
     greeting += f", {typer.style('✨Bonjour✨', fg=typer.colors.BLUE)}"
@@ -25,9 +29,11 @@ def greet(name: str, bye: bool, log_enabled: bool) -> None:
     greeting += f", {typer.style('☀Ciao☀', fg=typer.colors.BRIGHT_GREEN)}"
     greeting += f", {typer.style('🌟Konnichiwa🌟', fg=typer.colors.BRIGHT_YELLOW)}"
     greeting += f", {typer.style('🎉Howdy-doody🎉', fg=typer.colors.BRIGHT_BLUE)}!"
+
     if name:
         greeting = f"Hi {typer.style(name, bold=True)}, {greeting}"
 
     typer.echo(greeting)
+
     if bye:
         typer.echo(typer.style("Good Bye", fg=typer.colors.BLACK, bg=typer.colors.WHITE))


Test patch:
diff --git a/tests/cli/fgt/test_cli_fgt_config_check.py b/tests/cli/fgt/test_cli_fgt_config_check.py
index c9487d9..bdb4dff 100644
--- a/tests/cli/fgt/test_cli_fgt_config_check.py
+++ b/tests/cli/fgt/test_cli_fgt_config_check.py
@@ -100,7 +100,7 @@ def test_cli_app_fgt_config_check_empty_config() -> None:
 
 def test_cli_app_fgt_config_check_nonexist_config_file() -> None:
     """Test cli options and commands for fgt config check with an nonexisting configuration"""
-    with pytest.raises(GeneralWarning, match=r"there are no"):
+    with pytest.raises(GeneralWarning, match=r"There are no"):
         runner.invoke(
             app,
             [
@@ -135,7 +135,7 @@ def test_cli_app_fgt_config_check_dir() -> None:
 
 def test_cli_app_fgt_config_check_invalid_bundle_file() -> None:
     """Test cli options and commands for fgt config check with an invalid check bundle file"""
-    with pytest.raises(GeneralError, match=r"no valid bundle file"):
+    with pytest.raises(GeneralError, match=r"No valid bundle file"):
         runner.invoke(
             app,
             [
diff --git a/tests/cli/fgt/test_cli_fgt_config_get.py b/tests/cli/fgt/test_cli_fgt_config_get.py
index e8e9333..e75fe14 100644
--- a/tests/cli/fgt/test_cli_fgt_config_get.py
+++ b/tests/cli/fgt/test_cli_fgt_config_get.py
@@ -88,7 +88,7 @@ def test_cli_app_fgt_config_get_empty_config() -> None:
 
 def test_cli_app_fgt_config_get_noexist_config_file() -> None:
     """Test cli options and commands for fgt config get with an nonexisting configuration"""
-    with pytest.raises(GeneralWarning, match=r"there are no"):
+    with pytest.raises(GeneralWarning, match=r"There are no"):
         runner.invoke(
             app,
             [
diff --git a/tests/cli/fgt/test_cli_fgt_config_info.py b/tests/cli/fgt/test_cli_fgt_config_info.py
index 31a4e8f..5fe0286 100644
--- a/tests/cli/fgt/test_cli_fgt_config_info.py
+++ b/tests/cli/fgt/test_cli_fgt_config_info.py
@@ -75,7 +75,7 @@ def test_cli_app_fgt_config_info_empty_config() -> None:
 
 def test_cli_app_fgt_config_info_nonexist_config_file() -> None:
     """Test cli options and commands for fgt config info with an nonexisting configuration"""
-    with pytest.raises(GeneralWarning, match=r"there are no"):
+    with pytest.raises(GeneralWarning, match=r"There are no"):
         runner.invoke(
             app,
             [
diff --git a/tests/fortinet/test_forticlientems.py b/tests/fortinet/test_forticlientems.py
index 5971f91..3e2c315 100644
--- a/tests/fortinet/test_forticlientems.py
+++ b/tests/fortinet/test_forticlientems.py
@@ -162,7 +162,7 @@ def test_get_version_invalid(monkeypatch: MonkeyPatch) -> None:
         ems = FortiClientEMS("host", "dummy_user", "dummy_pass", ssl_verify=False)
         with pytest.raises(GeneralWarning) as err:
             ems.get_version()
-        assert "did not find any FortiClient EMS version number in response" in str(err.value)
+        assert "Did not find any FortiClient EMS version number in response" in str(err.value)
         requests.Session.get.assert_called_with(
             "https://host:443/api/v1/system/consts/get?system_update_time=1",
             params={},
diff --git a/tests/fortinet/test_fortigate_config_check.py b/tests/fortinet/test_fortigate_config_check.py
index 755a7e0..0eab0e6 100644
--- a/tests/fortinet/test_fortigate_config_check.py
+++ b/tests/fortinet/test_fortigate_config_check.py
@@ -74,7 +74,7 @@ def test_check_config_empty_bundle_file(config_vdom: FortiGateConfig) -> None:
             assert False
         except GeneralError as err:
             assert True
-            assert "there are no checks defined" in err.message
+            assert "There are no checks defined" in err.message
 
     @staticmethod
     @pytest.mark.parametrize(
diff --git a/tests/fortinet/test_fortinet.py b/tests/fortinet/test_fortinet.py
index 919730c..051439d 100644
--- a/tests/fortinet/test_fortinet.py
+++ b/tests/fortinet/test_fortinet.py
@@ -90,7 +90,7 @@ def test_api_get_connection_timeout(method: str, monkeypatch: MonkeyPatch) -> No
         )
         with pytest.raises(GeneralError) as err:
             FortinetTestClass("dummy").api(method, "url")
-        assert "connection timeout" in str(err.value)
+        assert "Connection timeout" in str(err.value)
 
     @staticmethod
     @pytest.mark.parametrize(
@@ -114,7 +114,7 @@ def test_api_unknown_method() -> None:
             assert False
         except GeneralError as err:
             assert True
-            assert "unknown API method" in err.message
+            assert "Unknown API method" in err.message
 
     @staticmethod
     @pytest.mark.parametrize(
@@ -130,7 +130,7 @@ def test_api_connection_error_unknown(method: str, monkeypatch: MonkeyPatch) ->
         )
         with pytest.raises(GeneralError) as err:
             FortinetTestClass("dummy").api(method, "url")
-        assert "unknown connection error" in str(err.value)
+        assert "Unknown connection error" in str(err.value)
 
     @staticmethod
     @pytest.mark.parametrize(
@@ -141,12 +141,12 @@ def test_api_connection_error_unknown(method: str, monkeypatch: MonkeyPatch) ->
         (
             pytest.param(
                 "... Connection refused ...",
-                "connection refused",
+                "Connection refused",
                 id="connection refused",
             ),
             pytest.param(
                 "... Name or service not known ...",
-                "name or service not known",
+                "Name or service not known",
                 id="unknown hostname",
             ),
         ),
@@ -194,7 +194,7 @@ def test_api_connection_error_cert_check(method: str, monkeypatch: MonkeyPatch)
         )
         with pytest.raises(GeneralError) as err:
             FortinetTestClass("dummy").api(method, "url")
-        assert "unable to get local issuer certificate" in str(err.value)
+        assert "Unable to get local issuer certificate" in str(err.value)
 
     @staticmethod
     @pytest.mark.parametrize(
diff --git a/tests/helpers/test_config.py b/tests/helpers/test_config.py
index 9ec059a..78e37fd 100644
--- a/tests/helpers/test_config.py
+++ b/tests/helpers/test_config.py
@@ -3,7 +3,7 @@
 """
 import os
 from pathlib import Path
-from typing import Callable, Union
+from typing import Callable, Optional, Union
 from unittest.mock import MagicMock
 
 import pytest
@@ -60,7 +60,7 @@ def test_config() -> None:
         ),
     )
     def test_load_configuration(
-        config_file: Union[Path, None],
+        config_file: Optional[Path],
         isfile_mock: Union[MagicMock, Callable[[str], bool]],
         load_yaml_file_mock: MagicMock,
         expected_inventory: Path,
diff --git a/tests/helpers/test_results.py b/tests/helpers/test_results.py
index f93c234..3fcecb8 100644
--- a/tests/helpers/test_results.py
+++ b/tests/helpers/test_results.py
@@ -4,7 +4,7 @@
 
 
 from pathlib import Path
-from typing import Any, Dict, List, Tuple, Union
+from typing import Any, Dict, List, Optional, Tuple, Union
 from unittest.mock import MagicMock
 
 import pytest
@@ -42,7 +42,7 @@ def test_init() -> None:
     )
     def test_push_result(
         inputs: Union[str, List[str]],
-        successful: Union[bool, None],
+        successful: Optional[bool],
         expected_result: Dict[str, Any],
     ) -> None:
         """Test the push_result() method"""
@@ -72,7 +72,7 @@ def test_push_result(
             pytest.param("test message", "dummy", id="some custom level"),
         ),
     )
-    def test_push_message(message: str, level: Union[None, str]) -> None:
+    def test_push_message(message: str, level: Optional[str]) -> None:
         """Test the push_message() method"""
 
         result = Result[Any]()
diff --git a/tests/tools/fgt/config/test_info.py b/tests/tools/fgt/config/test_info.py
index de7a4ef..494a62e 100644
--- a/tests/tools/fgt/config/test_info.py
+++ b/tests/tools/fgt/config/test_info.py
@@ -38,5 +38,5 @@ def test_info_empty(file: Path) -> None:
 
 def test_info_no_files_in_dir() -> None:
     """test the info utility with directory and empty configuration file"""
-    with pytest.raises(GeneralWarning, match=r"there are no configuration files"):
+    with pytest.raises(GeneralWarning, match=r"There are no configuration files"):
         info(Path("tests/"))
diff --git a/tests/tools/fmg/test_post.py b/tests/tools/fmg/test_post.py
index 3f9699c..15dd5ac 100644
--- a/tests/tools/fmg/test_post.py
+++ b/tests/tools/fmg/test_post.py
@@ -52,5 +52,5 @@ def test_post(monkeypatch: MonkeyPatch) -> None:
 def test_post_exception_empty_payload_file(monkeypatch: MonkeyPatch) -> None:
     """Test POST with exception when there is no data in the payload file"""
     monkeypatch.setattr("fotoobo.tools.fmg.main.load_json_file", MagicMock(return_value=[]))
-    with pytest.raises(GeneralWarning, match=r"there is no data in the given file"):
+    with pytest.raises(GeneralWarning, match=r"There is no data in the given file"):
         post(file=Path("dummy_file"), adom="dummy_adom", host="dummy_host")