From 7b14b42f48caaa70e20237268c952f959daf68f5 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Thu, 17 Oct 2024 10:33:01 +0200 Subject: [PATCH] bridge: Split out os-release parser We want to re-use it in beiboot.py. --- src/cockpit/bridge.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/cockpit/bridge.py b/src/cockpit/bridge.py index bead18ee3c3c..39606b084b10 100644 --- a/src/cockpit/bridge.py +++ b/src/cockpit/bridge.py @@ -26,7 +26,7 @@ import socket import stat import subprocess -from typing import Iterable, List, Optional, Sequence, Tuple, Type +from typing import Dict, Iterable, List, Optional, Sequence, Tuple, Type from cockpit._vendor.ferny import interaction_client from cockpit._vendor.systemd_ctypes import bus, run_async @@ -115,19 +115,7 @@ def get_os_release(): logger.warning("Neither /etc/os-release nor /usr/lib/os-release exists") return {} - os_release = {} - for line in file.readlines(): - line = line.strip() - if not line or line.startswith('#'): - continue - try: - k, v = line.split('=') - (v_parsed, ) = shlex.split(v) # expect exactly one token - except ValueError: - logger.warning('Ignoring invalid line in os-release: %r', line) - continue - os_release[k] = v_parsed - return os_release + return parse_os_release(file.read()) def do_init(self, message: JsonObject) -> None: # we're only interested in the case where this is a dict, but @@ -242,6 +230,22 @@ def setup_logging(*, debug: bool) -> None: logging.getLogger(module).setLevel(logging.DEBUG) +def parse_os_release(text: str) -> Dict[str, str]: + os_release = {} + for line in text.splitlines(): + line = line.strip() + if not line or line.startswith('#'): + continue + try: + k, v = line.split('=') + (v_parsed, ) = shlex.split(v) # expect exactly one token + except ValueError: + logger.warning('Ignoring invalid line in os-release: %r', line) + continue + os_release[k] = v_parsed + return os_release + + def start_ssh_agent() -> None: # Launch the agent so that it goes down with us on EOF; PDEATHSIG would be more robust, # but it gets cleared on setgid ssh-agent, which some distros still do