]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
datamodel: moving the main jinja template loader to the templates dir
authorAleš Mrázek <ales.mrazek@nic.cz>
Mon, 22 Jan 2024 13:02:00 +0000 (14:02 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Wed, 14 Feb 2024 12:14:30 +0000 (13:14 +0100)
manager/knot_resolver_manager/datamodel/config_schema.py
manager/knot_resolver_manager/datamodel/templates/__init__.py [new file with mode: 0644]
manager/setup.py
manager/tests/unit/datamodel/templates/test_common_macros.py
manager/tests/unit/datamodel/templates/test_forward_macros.py
manager/tests/unit/datamodel/templates/test_network_macros.py
manager/tests/unit/datamodel/templates/test_policy_macros.py
manager/tests/unit/datamodel/templates/test_view_macros.py

index b52c735f29442c971c0ae4f446f435c155128ca8..3383ad3aa7553d77fd6640242d139624285d59cc 100644 (file)
@@ -1,10 +1,8 @@
 import logging
 import os
 import socket
-import sys
 from typing import Any, Dict, List, Optional, Union
 
-from jinja2 import Environment, FileSystemLoader, Template
 from typing_extensions import Literal
 
 from knot_resolver_manager.constants import MAX_WORKERS
@@ -19,6 +17,7 @@ from knot_resolver_manager.datamodel.management_schema import ManagementSchema
 from knot_resolver_manager.datamodel.monitoring_schema import MonitoringSchema
 from knot_resolver_manager.datamodel.network_schema import NetworkSchema
 from knot_resolver_manager.datamodel.options_schema import OptionsSchema
+from knot_resolver_manager.datamodel.templates import MAIN_TEMPLATE
 from knot_resolver_manager.datamodel.types import Dir, EscapedStr, IntPositive
 from knot_resolver_manager.datamodel.view_schema import ViewSchema
 from knot_resolver_manager.datamodel.webmgmt_schema import WebmgmtSchema
@@ -32,35 +31,6 @@ DEFAULT_MANAGER_API_SOCK = _DEFAULT_RUNDIR + "/manager.sock"
 logger = logging.getLogger(__name__)
 
 
-def _get_templates_dir() -> str:
-    module = sys.modules["knot_resolver_manager.datamodel"].__file__
-    if module:
-        templates_dir = os.path.join(os.path.dirname(module), "templates")
-        if os.path.isdir(templates_dir):
-            return templates_dir
-        raise NotADirectoryError(f"the templates dir '{templates_dir}' is not a directory or does not exist")
-    raise OSError("package 'knot_resolver_manager.datamodel' cannot be located or loaded")
-
-
-_TEMPLATES_DIR = _get_templates_dir()
-
-
-def template_from_str(template: str) -> Template:
-    ldr = FileSystemLoader(_TEMPLATES_DIR)
-    env = Environment(trim_blocks=True, lstrip_blocks=True, loader=ldr)
-    return env.from_string(template)
-
-
-def _import_lua_template() -> Template:
-    path = os.path.join(_TEMPLATES_DIR, "config.lua.j2")
-    with open(path, "r", encoding="UTF-8") as file:
-        template = file.read()
-    return template_from_str(template)
-
-
-_MAIN_TEMPLATE = _import_lua_template()
-
-
 def _cpu_count() -> Optional[int]:
     try:
         return len(os.sched_getaffinity(0))
@@ -189,7 +159,7 @@ class KresConfig(ConfigSchema):
         # FIXME the `cwd` argument is used only for configuring control socket path
         # it should be removed and relative path used instead as soon as issue
         # https://gitlab.nic.cz/knot/knot-resolver/-/issues/720 is fixed
-        return _MAIN_TEMPLATE.render(cfg=self, cwd=os.getcwd())  # pyright: reportUnknownMemberType=false
+        return MAIN_TEMPLATE.render(cfg=self, cwd=os.getcwd())  # pyright: reportUnknownMemberType=false
 
 
 def get_rundir_without_validation(data: Dict[str, Any]) -> Dir:
diff --git a/manager/knot_resolver_manager/datamodel/templates/__init__.py b/manager/knot_resolver_manager/datamodel/templates/__init__.py
new file mode 100644 (file)
index 0000000..1846797
--- /dev/null
@@ -0,0 +1,33 @@
+import os
+import sys
+
+from jinja2 import Environment, FileSystemLoader, Template
+
+
+def _get_templates_dir() -> str:
+    module = sys.modules["knot_resolver_manager.datamodel"].__file__
+    if module:
+        templates_dir = os.path.join(os.path.dirname(module), "templates")
+        if os.path.isdir(templates_dir):
+            return templates_dir
+        raise NotADirectoryError(f"the templates dir '{templates_dir}' is not a directory or does not exist")
+    raise OSError("package 'knot_resolver_manager.datamodel' cannot be located or loaded")
+
+
+_TEMPLATES_DIR = _get_templates_dir()
+
+
+def _import_main_template() -> Template:
+    path = os.path.join(_TEMPLATES_DIR, "config.lua.j2")
+    with open(path, "r", encoding="UTF-8") as file:
+        template = file.read()
+    return template_from_str(template)
+
+
+def template_from_str(template: str) -> Template:
+    ldr = FileSystemLoader(_TEMPLATES_DIR)
+    env = Environment(trim_blocks=True, lstrip_blocks=True, loader=ldr)
+    return env.from_string(template)
+
+
+MAIN_TEMPLATE = _import_main_template()
index 673d55a2a858d01cc889c4a0182ff129ac980093..09d6d8810bc522c3c56d71192c3e066af66bbd9b 100644 (file)
@@ -7,6 +7,7 @@ packages = \
  'knot_resolver_manager.cli.cmd',
  'knot_resolver_manager.compat',
  'knot_resolver_manager.datamodel',
+ 'knot_resolver_manager.datamodel.templates',
  'knot_resolver_manager.datamodel.types',
  'knot_resolver_manager.kresd_controller',
  'knot_resolver_manager.kresd_controller.supervisord',
@@ -15,8 +16,7 @@ packages = \
  'knot_resolver_manager.utils.modeling']
 
 package_data = \
-{'': ['*'],
- 'knot_resolver_manager.datamodel': ['templates/*', 'templates/macros/*']}
+{'': ['*'], 'knot_resolver_manager.datamodel.templates': ['macros/*']}
 
 install_requires = \
 ['aiohttp',
index b2f363b25ef34a3115aec880f849951307671afd..0e794fce6aaee8f381db6dc7ff5d4cf54360cf49 100644 (file)
@@ -1,5 +1,5 @@
-from knot_resolver_manager.datamodel.config_schema import template_from_str
 from knot_resolver_manager.datamodel.forward_schema import ForwardServerSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
 
 
 def test_boolean():
index 4e8a5bce96429ea9f2a840ee0155d9e33e351761..534c6007a9ca4f08c0fa0915dc2b11955ce29dc0 100644 (file)
@@ -1,5 +1,5 @@
-from knot_resolver_manager.datamodel.config_schema import template_from_str
 from knot_resolver_manager.datamodel.forward_schema import ForwardSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
 from knot_resolver_manager.datamodel.types import IPAddressOptionalPort
 
 
index ad193d9826f91ca168ef716a96be1a0aa60c34e8..63fcf3731bc5622543083893909cef677659290b 100644 (file)
@@ -1,5 +1,5 @@
-from knot_resolver_manager.datamodel.config_schema import template_from_str
 from knot_resolver_manager.datamodel.network_schema import ListenSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
 
 
 def test_network_listen():
index 2920a2069b1cd96846fd434c8bf17d5bedbc37f8..a9804cd33cfb67b74b60bcfa66dc3e6d6fc90e78 100644 (file)
@@ -1,8 +1,8 @@
 from typing import List
 
-from knot_resolver_manager.datamodel.config_schema import template_from_str
 from knot_resolver_manager.datamodel.network_schema import AddressRenumberingSchema
 from knot_resolver_manager.datamodel.policy_schema import AnswerSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
 from knot_resolver_manager.datamodel.types import PolicyFlagEnum
 
 
index fbc62f49cb044d3d95356adf5822ed26c921a6c1..5f4956f852ab4cad0a07937cb9463be9733c1c44 100644 (file)
@@ -2,7 +2,7 @@ from typing import Any
 
 import pytest
 
-from knot_resolver_manager.datamodel.config_schema import template_from_str
+from knot_resolver_manager.datamodel.templates import template_from_str
 from knot_resolver_manager.datamodel.view_schema import ViewOptionsSchema, ViewSchema