import pkgutil
-from typing import Optional, Text, Union
+from typing import Text, Union
from jinja2 import Environment, Template
server: Server = Server()
network: Network = Network()
dns64: Union[bool, Dns64] = False
- lua: Optional[Lua] = None
+ lua: Lua = Lua()
class KresConfigStrict(DataValidator):
server: ServerStrict
network: NetworkStrict
- dns64: Union[bool, Dns64Strict] = False
- lua: Optional[LuaStrict]
+ dns64: Union[bool, Dns64Strict]
+ lua: LuaStrict
def _dns64(self, obj: KresConfig) -> Union[bool, Dns64]:
if obj.dns64 is True:
-from typing import List, Optional, Union
+from typing import Optional
from knot_resolver_manager.utils import DataParser, DataValidator
+from knot_resolver_manager.utils.exceptions import DataValidationException
class Lua(DataParser):
- script: Optional[Union[List[str], str]] = None
+ script_only: bool = False
+ script: Optional[str] = None
script_file: Optional[str] = None
class LuaStrict(DataValidator):
+ script_only: bool
script: Optional[str]
script_file: Optional[str]
- def _script(self, lua: Lua) -> Optional[str]:
- if isinstance(lua.script, List):
- return "\n".join(lua.script)
- return lua.script
-
def _validate(self) -> None:
- pass
+ if self.script and self.script_file:
+ raise DataValidationException("'lua.script' and 'lua.script-file' are both defined, only one can be used")
+{% if not cfg.lua.script_only %}
+
-- SERVER section
-- server.hostname
hostname('{{ cfg.server.hostname }}')
-- MODULES
modules = {
-{% if cfg.dns64 %}
- dns64 = '{{ cfg.dns64.prefix }}', -- DNS64
-{% endif %}
+ {{ "dns64 = '"+cfg.dns64.prefix+"'," if cfg.dns64 }}
}
-{% if cfg.lua %}
+{% endif %}
-- LUA section
{% if cfg.lua.script_file %}
{% import cfg.lua.script_file as script_file %}
-- lua.script
{{ cfg.lua.script }}
{% endif %}
-{% endif %}
\ No newline at end of file
--- /dev/null
+from pytest import raises
+
+from knot_resolver_manager.datamodel.lua_config import Lua, LuaStrict
+from knot_resolver_manager.utils.exceptions import DataValidationException
+
+yaml = """
+script-only: true
+script: |
+ -- lua script"""
+
+config = Lua.from_yaml(yaml)
+strict = LuaStrict(config)
+
+
+def test_parsing():
+ assert config.script_only == True
+ assert config.script == "-- lua script"
+
+
+def test_validating():
+ assert strict.script_only == True
+ assert strict.script == "-- lua script"
+
+
+def test_exception_raises():
+ yaml2 = """
+script: -- lua script
+script-file: path/to/file
+"""
+
+ with raises(DataValidationException):
+ LuaStrict(Lua.from_yaml(yaml2))