]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
client: command: get_socket_from_config improved
authorAleš Mrázek <ales.mrazek@nic.cz>
Fri, 28 Feb 2025 09:17:17 +0000 (10:17 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 28 Feb 2025 09:17:17 +0000 (10:17 +0100)
python/knot_resolver/client/command.py

index 3966f8ca93663b58cbe619cb665f982d3158471a..7a679885af451a62024913b420205d736ec30502 100644 (file)
@@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Set, Tuple, Type, TypeVar
 from urllib.parse import quote
 
 from knot_resolver.constants import API_SOCK_FILE, CONFIG_FILE
-from knot_resolver.datamodel.types import IPAddressPort
+from knot_resolver.datamodel.types import IPAddressPort, WritableFilePath
 from knot_resolver.utils.modeling import parsing
 from knot_resolver.utils.modeling.exceptions import DataValidationError
 from knot_resolver.utils.requests import SocketDesc
@@ -154,16 +154,21 @@ def get_socket_from_config(config: Path, optional_file: bool) -> Optional[Socket
     try:
         with open(config, "r", encoding="utf8") as f:
             data = parsing.try_to_parse(f.read())
+
         mkey = "management"
         if mkey in data:
             management = data[mkey]
-            if "unix-socket" in management:
+
+            skey = "unix-socket"
+            if skey in management:
+                sock = WritableFilePath(management[skey], object_path=f"/{mkey}/{skey}")
                 return SocketDesc(
-                    f'http+unix://{quote(management["unix-socket"], safe="")}/',
+                    f'http+unix://{quote(str(sock), safe="")}/',
                     f'Key "/management/unix-socket" in "{config}" file',
                 )
-            if "interface" in management:
-                ip = IPAddressPort(management["interface"], object_path=f"/{mkey}/interface")
+            ikey = "interface"
+            if ikey in data[mkey]:
+                ip = IPAddressPort(management[ikey], object_path=f"/{mkey}/{ikey}")
                 return SocketDesc(
                     f"http://{ip.addr}:{ip.port}",
                     f'Key "/management/interface" in "{config}" file',