From: Vasek Sraier Date: Tue, 23 Mar 2021 18:50:20 +0000 (+0100) Subject: compat: module expansion and refactoring - included dataclasses X-Git-Tag: v6.0.0a1~200 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ecb35a35e1355be422560fbb9273f3a920c5bc3;p=thirdparty%2Fknot-resolver.git compat: module expansion and refactoring - included dataclasses --- diff --git a/manager/knot_resolver_manager/compat/__init__.py b/manager/knot_resolver_manager/compat/__init__.py new file mode 100644 index 000000000..2f41e5328 --- /dev/null +++ b/manager/knot_resolver_manager/compat/__init__.py @@ -0,0 +1,4 @@ +from . import asyncio + + +__all__ = ["asyncio"] diff --git a/manager/knot_resolver_manager/compat.py b/manager/knot_resolver_manager/compat/asyncio.py similarity index 88% rename from manager/knot_resolver_manager/compat.py rename to manager/knot_resolver_manager/compat/asyncio.py index 3a1482a17..331e180ba 100644 --- a/manager/knot_resolver_manager/compat.py +++ b/manager/knot_resolver_manager/compat/asyncio.py @@ -7,7 +7,7 @@ import functools from typing import Awaitable, Coroutine -def asyncio_to_thread(func, *args, **kwargs) -> Awaitable: +def to_thread(func, *args, **kwargs) -> Awaitable: # version 3.9 and higher, call directly if sys.version_info.major >= 3 and sys.version_info.minor >= 9: return asyncio.to_thread(func, *args, **kwargs) @@ -19,7 +19,7 @@ def asyncio_to_thread(func, *args, **kwargs) -> Awaitable: return loop.run_in_executor(None, pfunc) -def asyncio_create_task(coro: Coroutine, name=None) -> Future: +def create_task(coro: Coroutine, name=None) -> Future: # version 3.8 and higher, call directly if sys.version_info.major >= 3 and sys.version_info.minor >= 8: return asyncio.create_task(coro, name=name) @@ -33,7 +33,7 @@ def asyncio_create_task(coro: Coroutine, name=None) -> Future: return asyncio.ensure_future(coro) -def asyncio_run(coro: Coroutine, debug=None) -> Awaitable: +def run(coro: Coroutine, debug=None) -> Awaitable: # ideally copy-paste of this: # https://github.com/python/cpython/blob/3.9/Lib/asyncio/runners.py#L8 diff --git a/manager/knot_resolver_manager/compat/dataclasses.py b/manager/knot_resolver_manager/compat/dataclasses.py new file mode 100644 index 000000000..403141d03 --- /dev/null +++ b/manager/knot_resolver_manager/compat/dataclasses.py @@ -0,0 +1,13 @@ +""" +This is a compat module that we will use with dataclasses +due to them being unsupported on Python 3.6. However, a proper backport exists. +This module is simply a reimport of that backported library (or the system one), +so that if we have to vendor that library or do something similar with it, we have +the option to do it transparently, without changing anything else. +""" + + +from dataclasses import dataclass + + +__all__ = ["dataclass"] diff --git a/manager/knot_resolver_manager/datamodel.py b/manager/knot_resolver_manager/datamodel.py index 32cc06f0d..728dbfd68 100644 --- a/manager/knot_resolver_manager/datamodel.py +++ b/manager/knot_resolver_manager/datamodel.py @@ -1,6 +1,6 @@ -from dataclasses import dataclass from typing import Optional +from .compat.dataclasses import dataclass from .utils import StrictyamlParser diff --git a/manager/knot_resolver_manager/kresd_manager.py b/manager/knot_resolver_manager/kresd_manager.py index d4c5f9b3a..dfcc8b7dc 100644 --- a/manager/knot_resolver_manager/kresd_manager.py +++ b/manager/knot_resolver_manager/kresd_manager.py @@ -19,13 +19,13 @@ class Kresd: raise NotImplementedError() async def start(self): - await compat.asyncio_to_thread(systemd.start_unit, f"kresd@{self._id}.service") + await compat.asyncio.to_thread(systemd.start_unit, f"kresd@{self._id}.service") async def stop(self): - await compat.asyncio_to_thread(systemd.stop_unit, f"kresd@{self._id}.service") + await compat.asyncio.to_thread(systemd.stop_unit, f"kresd@{self._id}.service") async def restart(self): - await compat.asyncio_to_thread( + await compat.asyncio.to_thread( systemd.restart_unit, f"kresd@{self._id}.service" ) @@ -55,7 +55,7 @@ class KresdManager: await kresd.stop() async def _collect_already_running_children(self): - units = await compat.asyncio_to_thread(systemd.list_units) + units = await compat.asyncio.to_thread(systemd.list_units) for unit in units: u: str = unit if u.startswith("kresd@") and u.endswith(".service"):