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
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',