]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: replacement of some List with Dict
authorAleš <ales.mrazek@nic.cz>
Wed, 24 Nov 2021 14:53:25 +0000 (15:53 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:53 +0000 (16:17 +0200)
- in some cases with keys this is advantageous
- implemented __hash__ method for 'DomainName ' custom type
- changes in lua_template.j2

manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/forward_zone.py
manager/knot_resolver_manager/datamodel/lua_template.j2
manager/knot_resolver_manager/datamodel/static_hints_schema.py
manager/knot_resolver_manager/datamodel/stub_zone_schema.py
manager/knot_resolver_manager/datamodel/types.py
manager/knot_resolver_manager/datamodel/view_schema.py

index 69ae9eef8142283b0f8ed4028fe5ba0be484ac37..e17d6db63fb75ea3d26db7a8de543bc3149c84de 100644 (file)
@@ -1,5 +1,5 @@
 import pkgutil
-from typing import Dict, List, Optional, Text, Union
+from typing import Dict, Optional, Text, Union
 
 from jinja2 import Environment, Template
 from typing_extensions import Literal
@@ -16,6 +16,7 @@ from knot_resolver_manager.datamodel.policy_schema import PolicySchema
 from knot_resolver_manager.datamodel.server_schema import ServerSchema
 from knot_resolver_manager.datamodel.static_hints_schema import StaticHintsSchema
 from knot_resolver_manager.datamodel.stub_zone_schema import StubZoneSchema
+from knot_resolver_manager.datamodel.types import DomainName
 from knot_resolver_manager.datamodel.view_schema import ViewSchema
 from knot_resolver_manager.utils import SchemaNode
 
@@ -37,10 +38,10 @@ class KresConfig(SchemaNode):
         options: OptionsSchema = OptionsSchema()
         network: NetworkSchema = NetworkSchema()
         static_hints: StaticHintsSchema = StaticHintsSchema()
-        views: Optional[List[ViewSchema]] = None
+        views: Optional[Dict[str, ViewSchema]] = None
         policy: Optional[Dict[str, PolicySchema]] = None
-        stub_zones: Optional[List[StubZoneSchema]] = None
-        forward_zones: Optional[List[ForwardZoneSchema]] = None
+        stub_zones: Optional[Dict[DomainName, StubZoneSchema]] = None
+        forward_zones: Optional[Dict[DomainName, ForwardZoneSchema]] = None
         cache: CacheSchema = CacheSchema()
         dnssec: Union[bool, DnssecSchema] = True
         dns64: Union[bool, Dns64Schema] = False
@@ -53,10 +54,10 @@ class KresConfig(SchemaNode):
     options: OptionsSchema
     network: NetworkSchema
     static_hints: StaticHintsSchema
-    views: Optional[List[ViewSchema]]
+    views: Optional[Dict[str, ViewSchema]]
     policy: Optional[Dict[str, PolicySchema]]
-    stub_zones: Optional[List[StubZoneSchema]]
-    forward_zones: Optional[List[ForwardZoneSchema]]
+    stub_zones: Optional[Dict[DomainName, StubZoneSchema]]
+    forward_zones: Optional[Dict[DomainName, ForwardZoneSchema]]
     cache: CacheSchema
     dnssec: Union[Literal[False], DnssecSchema]
     dns64: Union[Literal[False], Dns64Schema]
index 8376749e0b02c7534c59b3acd42f95f1587e97ab..88331f4b24f82da213938cb35767feb96783bbf4 100644 (file)
@@ -1,6 +1,6 @@
 from typing import List, Optional, Union
 
-from knot_resolver_manager.datamodel.types import AnyPath, DomainName, IPAddressPort
+from knot_resolver_manager.datamodel.types import CheckedPath, DomainName, IPAddressPort
 from knot_resolver_manager.datamodel.view_schema import FlagsEnum
 from knot_resolver_manager.utils import SchemaNode
 
@@ -9,11 +9,10 @@ class ForwardServerSchema(SchemaNode):
     address: IPAddressPort
     pin_sha256: Optional[Union[str, List[str]]] = None
     hostname: Optional[DomainName] = None
-    ca_file: Optional[AnyPath] = None
+    ca_file: Optional[CheckedPath] = None
 
 
 class ForwardZoneSchema(SchemaNode):
-    name: DomainName
     tls: bool = False
     servers: Union[List[IPAddressPort], List[ForwardServerSchema]]
     views: Optional[List[str]] = None
index 297f22b0bb7a87d928160516c8b36264518c1802..7234a3840cb6f94e2d8a0eeac54dcd7358ae0d60 100644 (file)
@@ -132,9 +132,9 @@ hints.add_hosts('{{ item }}')
 -- static-hints.root-hints
 {% if cfg.static_hints.root_hints %}
 hints.root({
-{% for item in cfg.static_hints.root_hints %}
-    ['{{ item.name }}'] = {
-{% for addr in item.addresses %}
+{% for name, addrs in cfg.static_hints.root_hints.items() %}
+['{{ name }}'] = {
+{% for addr in addrs %}
         '{{ addr }}',
 {% endfor %}
     },
@@ -144,9 +144,9 @@ hints.root({
 
 -- static-hints.hints
 {% if cfg.static_hints.hints %}
-{% for item in cfg.static_hints.hints %}
-{% for addr in item.addresses %}
-hints.set('{{ item.name }} {{ addr }}')
+{% for name, addrs in cfg.static_hints.hints.items() %}
+{% for addr in addrs %}
+hints.set('{{ name }} {{ addr }}')
 {% endfor %}
 {% endfor %}
 {% endif %}
index fcb7024b354447a55864d9390d3904c95cfc291d..0d9c010a951b1eca3bb38c0b27f59108d9478b7d 100644 (file)
@@ -1,19 +1,14 @@
-from typing import List, Optional
+from typing import Dict, List, Optional
 
-from knot_resolver_manager.datamodel.types import CheckedPath, TimeUnit
+from knot_resolver_manager.datamodel.types import CheckedPath, DomainName, IPAddress, TimeUnit
 from knot_resolver_manager.utils import SchemaNode
 
 
-class Hint(SchemaNode):
-    name: str
-    addresses: List[str]
-
-
 class StaticHintsSchema(SchemaNode):
     ttl: Optional[TimeUnit] = None
     no_data: bool = True
     etc_hosts: bool = False
     root_hints_file: Optional[CheckedPath] = None
     hints_files: Optional[List[CheckedPath]] = None
-    root_hints: Optional[List[Hint]] = None
-    hints: Optional[List[Hint]] = None
+    root_hints: Optional[Dict[DomainName, List[IPAddress]]] = None
+    hints: Optional[Dict[DomainName, List[IPAddress]]] = None
index c5d14d3b75c33ea5bff3ed04b572a5a2faef4b21..64e61c152535bf41e2990c2f10f1b5548115f2a8 100644 (file)
@@ -6,7 +6,6 @@ from knot_resolver_manager.utils import SchemaNode
 
 
 class StubZoneSchema(SchemaNode):
-    name: str
     servers: List[IPAddressPort]
     views: Optional[List[str]] = None
     options: Optional[List[FlagsEnum]] = None
index 23200065f19367403f4b6ee9886f5bf6ae2d0758..bf892cfba08cc916ccdb804a35c31c530baf4845 100644 (file)
@@ -176,6 +176,9 @@ class DomainName(CustomValueType):
     def to_std(self) -> str:
         return self._value
 
+    def __hash__(self) -> int:
+        return hash(self._value)
+
     def __str__(self) -> str:
         return self._value
 
index 95ae423018bf76e9c9edca4ef1b998c50cb02e40..6c0f64ba9cbcde9722f908c881105d7756c90b63 100644 (file)
@@ -9,7 +9,6 @@ FlagsEnum = LiteralEnum["no-cache", "no-edns"]
 
 
 class ViewSchema(SchemaNode):
-    id: str
     addresses: Optional[List[IPNetwork]] = None
     tsig: Optional[List[str]] = None
     options: Optional[List[FlagsEnum]] = None