]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: integer type annotations replaced with custom types
authorAleš <ales.mrazek@nic.cz>
Mon, 14 Feb 2022 15:06:37 +0000 (16:06 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:54 +0000 (16:17 +0200)
manager/knot_resolver_manager/datamodel/dnssec_schema.py
manager/knot_resolver_manager/datamodel/network_schema.py
manager/knot_resolver_manager/datamodel/options_schema.py
manager/knot_resolver_manager/datamodel/server_schema.py
manager/knot_resolver_manager/kres_manager.py
manager/tests/unit/datamodel/test_config_schema.py
manager/tests/unit/datamodel/test_options_schema.py

index ba1e6d5179aecff3d57bd8abde73675bacb3dbbb..add4eeebe6b195a0eb0e57e820f5df5963503fc0 100644 (file)
@@ -1,6 +1,6 @@
 from typing import List, Optional
 
-from knot_resolver_manager.datamodel.types import TimeUnit
+from knot_resolver_manager.datamodel.types import IntNonNegative, TimeUnit
 from knot_resolver_manager.utils import SchemaNode
 
 
@@ -37,7 +37,7 @@ class DnssecSchema(SchemaNode):
     trust_anchor_sentinel: bool = True
     trust_anchor_signal_query: bool = True
     time_skew_detection: bool = True
-    keep_removed: int = 0
+    keep_removed: IntNonNegative = IntNonNegative(0)
     refresh_time: Optional[TimeUnit] = None
     hold_down_time: TimeUnit = TimeUnit("30d")
     trust_anchors: Optional[List[str]] = None
index 6292cd1c7fa49f3e8a6e95509bc20e8292775803..91475dfc2e44605e0fbbdf80088d71b2794fe1df 100644 (file)
@@ -4,6 +4,8 @@ from typing_extensions import Literal
 
 from knot_resolver_manager.datamodel.types import (
     CheckedPath,
+    Int0_512,
+    Int0_65535,
     InterfaceOptionalPort,
     IPAddress,
     IPNetwork,
@@ -61,13 +63,11 @@ class TLSSchema(SchemaNode):
     sticket_secret: Optional[str] = None
     sticket_secret_file: Optional[CheckedPath] = None
     auto_discovery: bool = False
-    padding: int = 1
+    padding: Union[bool, Int0_512] = True
 
     def _validate(self):
         if self.sticket_secret and self.sticket_secret_file:
             raise ValueError("'sticket_secret' and 'sticket_secret_file' are both defined, only one can be used")
-        if not 0 <= self.padding <= 512:
-            raise ValueError("'padding' must be number in range<0-512>")
 
 
 class ListenSchema(SchemaNode):
@@ -155,7 +155,7 @@ class NetworkSchema(SchemaNode):
     do_ipv6: bool = True
     out_interface_v4: Optional[IPv4Address] = None
     out_interface_v6: Optional[IPv6Address] = None
-    tcp_pipeline: int = 100
+    tcp_pipeline: Int0_65535 = Int0_65535(100)
     edns_tcp_keepalive: bool = True
     edns_buffer_size: EdnsBufferSizeSchema = EdnsBufferSizeSchema()
     address_renumbering: Optional[List[AddressRenumberingSchema]] = None
@@ -164,7 +164,3 @@ class NetworkSchema(SchemaNode):
         ListenSchema({"interface": "127.0.0.1"}),
         ListenSchema({"interface": "::1", "freebind": True}),
     ]
-
-    def _validate(self):
-        if self.tcp_pipeline < 0:
-            raise ValueError("'tcp-pipeline' must be nonnegative number")
index 832d3511b1b823b18dfe7f2a6d47f7a8538fc66c..12b99ef28bce8d7e243880940dd31f4e3836deaa 100644 (file)
@@ -2,10 +2,9 @@ from typing import Any, Union
 
 from typing_extensions import Literal
 
+from knot_resolver_manager.datamodel.types import IntNonNegative, TimeUnit
 from knot_resolver_manager.utils import SchemaNode
 
-from .types import TimeUnit
-
 GlueCheckingEnum = Literal["normal", "strict", "permissive"]
 
 
@@ -19,7 +18,7 @@ class PredictionSchema(SchemaNode):
     """
 
     window: TimeUnit = TimeUnit("15m")
-    period: int = 24
+    period: IntNonNegative = IntNonNegative(24)
 
 
 class OptionsSchema(SchemaNode):
index ea6a550fbedffb2476b99bfe88730feebd4832c3..9ce17ec40eaef646ad6da69fbb4c26dcaadd1fe0 100644 (file)
@@ -10,6 +10,7 @@ from knot_resolver_manager.datamodel.types import (
     DNSRecordTypeEnum,
     DomainName,
     InterfacePort,
+    IntPositive,
     IPAddressPort,
     UncheckedPath,
 )
@@ -114,7 +115,7 @@ class ServerSchema(SchemaNode):
         hostname: Optional[str] = None
         groupid: Optional[str] = None
         nsid: Optional[str] = None
-        workers: Union[Literal["auto"], int] = 1
+        workers: Union[Literal["auto"], IntPositive] = IntPositive(1)
         use_cache_gc: bool = True
         backend: BackendEnum = "auto"
         watchdog: Union[bool, WatchDogSchema] = True
@@ -127,7 +128,7 @@ class ServerSchema(SchemaNode):
     hostname: str
     groupid: Optional[str]
     nsid: Optional[str]
-    workers: int
+    workers: IntPositive
     use_cache_gc: bool
     backend: BackendEnum = "auto"
     watchdog: Union[bool, WatchDogSchema]
@@ -142,11 +143,9 @@ class ServerSchema(SchemaNode):
 
     def _workers(self, obj: Raw) -> Any:
         if obj.workers == "auto":
-            return _cpu_count()
+            return IntPositive(_cpu_count())
         return obj.workers
 
     def _validate(self) -> None:
-        if self.workers < 0:
-            raise ValueError("Number of workers must be non-negative")
         if self.watchdog and self.backend not in ["auto", "systemd"]:
             raise ValueError("'watchdog' can only be configured for 'systemd' backend")
index 7353c87cbbe9fa3aa69c98a139b7b2ffc5a6d2b5..41042bba766a379fa2f5b1a7b5a4f5eb8d507727 100644 (file)
@@ -146,7 +146,7 @@ class KresManager:
     async def apply_config(self, config: KresConfig) -> None:
         async with self._manager_lock:
             logger.debug("Applying new config to all workers")
-            await self._ensure_number_of_children(config, config.server.workers)
+            await self._ensure_number_of_children(config, int(config.server.workers))
             await self._rolling_restart(config)
 
             if self._is_gc_running() != config.server.use_cache_gc:
index d7786cb0fd8647b10b6e00635c5bd2caa69cc4be..e55777cf5141d7d65b392b8d3ab8362eee423adb 100644 (file)
@@ -2,7 +2,6 @@ import json
 from typing import Any, Dict, cast
 
 from pytest import raises
-from yaml.nodes import Node
 
 from knot_resolver_manager.datamodel import KresConfig
 from knot_resolver_manager.datamodel.types import IPv6Network96, TimeUnit
@@ -35,7 +34,7 @@ def test_dnssec_default_true():
     assert config.dnssec.trust_anchor_sentinel == True
     assert config.dnssec.trust_anchor_signal_query == True
     assert config.dnssec.time_skew_detection == True
-    assert config.dnssec.keep_removed == 0
+    assert int(config.dnssec.keep_removed) == 0
     assert config.dnssec.refresh_time == None
     assert config.dnssec.hold_down_time == TimeUnit("30d")
 
index eeb193454dc0e6901634d61c35e59db1898c3e00..b775dc87352bb681b40c485fca56b2db341e7ac7 100644 (file)
@@ -1,9 +1,9 @@
 from knot_resolver_manager.datamodel.options_schema import OptionsSchema
-from knot_resolver_manager.datamodel.types import TimeUnit
+from knot_resolver_manager.datamodel.types import IntNonNegative, TimeUnit
 
 
 def test_prediction_true():
     y = OptionsSchema({"prediction": True})
 
     assert y.prediction.window == TimeUnit("15m")
-    assert y.prediction.period == 24
+    assert int(y.prediction.period) == 24