From: Aleš Mrázek Date: Mon, 22 Jan 2024 13:02:00 +0000 (+0100) Subject: datamodel: moving the main jinja template loader to the templates dir X-Git-Tag: v6.0.7~23^2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=efaa55f3f46fd31f63ef3a776d7d56f8fcd68396;p=thirdparty%2Fknot-resolver.git datamodel: moving the main jinja template loader to the templates dir --- diff --git a/manager/knot_resolver_manager/datamodel/config_schema.py b/manager/knot_resolver_manager/datamodel/config_schema.py index b52c735f2..3383ad3aa 100644 --- a/manager/knot_resolver_manager/datamodel/config_schema.py +++ b/manager/knot_resolver_manager/datamodel/config_schema.py @@ -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 index 000000000..1846797b2 --- /dev/null +++ b/manager/knot_resolver_manager/datamodel/templates/__init__.py @@ -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() diff --git a/manager/setup.py b/manager/setup.py index 673d55a2a..09d6d8810 100644 --- a/manager/setup.py +++ b/manager/setup.py @@ -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', diff --git a/manager/tests/unit/datamodel/templates/test_common_macros.py b/manager/tests/unit/datamodel/templates/test_common_macros.py index b2f363b25..0e794fce6 100644 --- a/manager/tests/unit/datamodel/templates/test_common_macros.py +++ b/manager/tests/unit/datamodel/templates/test_common_macros.py @@ -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(): diff --git a/manager/tests/unit/datamodel/templates/test_forward_macros.py b/manager/tests/unit/datamodel/templates/test_forward_macros.py index 4e8a5bce9..534c6007a 100644 --- a/manager/tests/unit/datamodel/templates/test_forward_macros.py +++ b/manager/tests/unit/datamodel/templates/test_forward_macros.py @@ -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 diff --git a/manager/tests/unit/datamodel/templates/test_network_macros.py b/manager/tests/unit/datamodel/templates/test_network_macros.py index ad193d982..63fcf3731 100644 --- a/manager/tests/unit/datamodel/templates/test_network_macros.py +++ b/manager/tests/unit/datamodel/templates/test_network_macros.py @@ -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(): diff --git a/manager/tests/unit/datamodel/templates/test_policy_macros.py b/manager/tests/unit/datamodel/templates/test_policy_macros.py index 2920a2069..a9804cd33 100644 --- a/manager/tests/unit/datamodel/templates/test_policy_macros.py +++ b/manager/tests/unit/datamodel/templates/test_policy_macros.py @@ -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 diff --git a/manager/tests/unit/datamodel/templates/test_view_macros.py b/manager/tests/unit/datamodel/templates/test_view_macros.py index fbc62f49c..5f4956f85 100644 --- a/manager/tests/unit/datamodel/templates/test_view_macros.py +++ b/manager/tests/unit/datamodel/templates/test_view_macros.py @@ -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