From 5208baa3e2ff06a252b5747a27b3ee91142afb8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ale=C5=A1=20Mr=C3=A1zek?= <ales.mrazek@nic.cz>
Date: Mon, 19 Aug 2024 06:55:56 +0200
Subject: [PATCH] python: datamodel module moved out of manager module

---
 python/knot_resolver_manager/__init__.py      |  4 +++
 .../knot_resolver_manager/client/__init__.py  |  2 +-
 .../knot_resolver_manager/client/command.py   |  4 +--
 .../client/commands/cache.py                  |  2 +-
 .../client/commands/convert.py                |  4 +--
 .../client/commands/schema.py                 |  2 +-
 .../client/commands/validate.py               |  4 +--
 .../controller/__init__.py                    |  2 +-
 .../controller/interface.py                   |  2 +-
 .../controller/supervisord/__init__.py        |  2 +-
 .../controller/supervisord/config_file.py     |  4 +--
 .../{manager => }/datamodel/__init__.py       |  0
 .../{manager => }/datamodel/cache_schema.py   |  4 +--
 .../{manager => }/datamodel/config_schema.py  | 30 +++++++++----------
 .../{manager => }/datamodel/design-notes.yml  |  0
 .../{manager => }/datamodel/dns64_schema.py   |  2 +-
 .../{manager => }/datamodel/dnssec_schema.py  |  2 +-
 .../{manager => }/datamodel/forward_schema.py |  2 +-
 .../{manager => }/datamodel/globals.py        |  0
 .../datamodel/local_data_schema.py            |  2 +-
 .../{manager => }/datamodel/logging_schema.py |  2 +-
 .../{manager => }/datamodel/lua_schema.py     |  2 +-
 .../datamodel/management_schema.py            |  2 +-
 .../datamodel/monitoring_schema.py            |  2 +-
 .../{manager => }/datamodel/network_schema.py |  2 +-
 .../{manager => }/datamodel/options_schema.py |  0
 .../{manager => }/datamodel/policy_schema.py  |  6 ++--
 .../{manager => }/datamodel/rpz_schema.py     |  2 +-
 .../{manager => }/datamodel/slice_schema.py   |  2 +-
 .../datamodel/static_hints_schema.py          |  2 +-
 .../datamodel/stub_zone_schema.py             |  2 +-
 .../datamodel/templates/__init__.py           |  4 +--
 .../datamodel/templates/cache.lua.j2          |  0
 .../datamodel/templates/dns64.lua.j2          |  0
 .../datamodel/templates/dnssec.lua.j2         |  0
 .../datamodel/templates/forward.lua.j2        |  0
 .../datamodel/templates/local_data.lua.j2     |  0
 .../datamodel/templates/logging.lua.j2        |  0
 .../templates/macros/cache_macros.lua.j2      |  0
 .../templates/macros/common_macros.lua.j2     |  0
 .../templates/macros/forward_macros.lua.j2    |  0
 .../templates/macros/local_data_macros.lua.j2 |  0
 .../templates/macros/network_macros.lua.j2    |  0
 .../templates/macros/policy_macros.lua.j2     |  0
 .../templates/macros/view_macros.lua.j2       |  0
 .../datamodel/templates/monitoring.lua.j2     |  0
 .../datamodel/templates/network.lua.j2        |  0
 .../datamodel/templates/options.lua.j2        |  0
 .../datamodel/templates/policy-config.lua.j2  |  0
 .../datamodel/templates/static_hints.lua.j2   |  0
 .../datamodel/templates/views.lua.j2          |  0
 .../datamodel/templates/webmgmt.lua.j2        |  0
 .../datamodel/templates/worker-config.lua.j2  |  0
 .../{manager => }/datamodel/types/__init__.py |  0
 .../datamodel/types/base_types.py             |  0
 .../{manager => }/datamodel/types/enums.py    |  0
 .../{manager => }/datamodel/types/files.py    |  2 +-
 .../datamodel/types/generic_types.py          |  0
 .../{manager => }/datamodel/types/types.py    |  2 +-
 .../{manager => }/datamodel/view_schema.py    |  2 +-
 .../{manager => }/datamodel/webmgmt_schema.py |  2 +-
 .../knot_resolver_manager/manager/__init__.py |  1 -
 .../manager/config_store.py                   |  2 +-
 .../manager/constants.py                      |  2 +-
 .../manager/kres_manager.py                   |  2 +-
 python/knot_resolver_manager/manager/log.py   |  4 +--
 .../knot_resolver_manager/manager/server.py   |  8 ++---
 .../manager/statistics.py                     |  2 +-
 setup.py                                      |  8 ++---
 tests/manager/__init__.py                     |  2 +-
 .../datamodel/templates/test_cache_macros.py  |  4 +--
 .../datamodel/templates/test_common_macros.py |  4 +--
 .../templates/test_forward_macros.py          |  6 ++--
 .../templates/test_network_macros.py          |  4 +--
 .../datamodel/templates/test_policy_macros.py |  8 ++---
 .../datamodel/templates/test_types_render.py  |  2 +-
 .../datamodel/templates/test_view_macros.py   |  4 +--
 tests/manager/datamodel/test_config_schema.py |  4 +--
 .../manager/datamodel/test_forward_schema.py  |  2 +-
 tests/manager/datamodel/test_local_data.py    |  2 +-
 tests/manager/datamodel/test_lua_schema.py    |  2 +-
 .../datamodel/test_management_schema.py       |  2 +-
 .../manager/datamodel/test_network_schema.py  |  4 +--
 tests/manager/datamodel/test_policy_schema.py |  4 +--
 tests/manager/datamodel/test_rpz_schema.py    |  2 +-
 .../datamodel/types/test_base_types.py        |  2 +-
 .../datamodel/types/test_custom_types.py      |  2 +-
 .../datamodel/types/test_generic_types.py     |  2 +-
 tests/manager/test_config_store.py            |  2 +-
 89 files changed, 103 insertions(+), 100 deletions(-)
 rename python/knot_resolver_manager/{manager => }/datamodel/__init__.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/cache_schema.py (97%)
 rename python/knot_resolver_manager/{manager => }/datamodel/config_schema.py (87%)
 rename python/knot_resolver_manager/{manager => }/datamodel/design-notes.yml (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/dns64_schema.py (85%)
 rename python/knot_resolver_manager/{manager => }/datamodel/dnssec_schema.py (94%)
 rename python/knot_resolver_manager/{manager => }/datamodel/forward_schema.py (97%)
 rename python/knot_resolver_manager/{manager => }/datamodel/globals.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/local_data_schema.py (98%)
 rename python/knot_resolver_manager/{manager => }/datamodel/logging_schema.py (98%)
 rename python/knot_resolver_manager/{manager => }/datamodel/lua_schema.py (90%)
 rename python/knot_resolver_manager/{manager => }/datamodel/management_schema.py (86%)
 rename python/knot_resolver_manager/{manager => }/datamodel/monitoring_schema.py (85%)
 rename python/knot_resolver_manager/{manager => }/datamodel/network_schema.py (99%)
 rename python/knot_resolver_manager/{manager => }/datamodel/options_schema.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/policy_schema.py (94%)
 rename python/knot_resolver_manager/{manager => }/datamodel/rpz_schema.py (89%)
 rename python/knot_resolver_manager/{manager => }/datamodel/slice_schema.py (87%)
 rename python/knot_resolver_manager/{manager => }/datamodel/static_hints_schema.py (91%)
 rename python/knot_resolver_manager/{manager => }/datamodel/stub_zone_schema.py (87%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/__init__.py (87%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/cache.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/dns64.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/dnssec.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/forward.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/local_data.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/logging.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/cache_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/common_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/forward_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/local_data_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/network_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/policy_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/macros/view_macros.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/monitoring.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/network.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/options.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/policy-config.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/static_hints.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/views.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/webmgmt.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/templates/worker-config.lua.j2 (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/__init__.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/base_types.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/enums.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/files.py (98%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/generic_types.py (100%)
 rename python/knot_resolver_manager/{manager => }/datamodel/types/types.py (99%)
 rename python/knot_resolver_manager/{manager => }/datamodel/view_schema.py (95%)
 rename python/knot_resolver_manager/{manager => }/datamodel/webmgmt_schema.py (88%)

diff --git a/python/knot_resolver_manager/__init__.py b/python/knot_resolver_manager/__init__.py
index 3dc1f76bc..511e8d44e 100644
--- a/python/knot_resolver_manager/__init__.py
+++ b/python/knot_resolver_manager/__init__.py
@@ -1 +1,5 @@
+from .datamodel.config_schema import KresConfig
+
 __version__ = "0.1.0"
+
+__all__ = ["KresConfig"]
diff --git a/python/knot_resolver_manager/client/__init__.py b/python/knot_resolver_manager/client/__init__.py
index 2b1eb0f6d..d3c6280d4 100644
--- a/python/knot_resolver_manager/client/__init__.py
+++ b/python/knot_resolver_manager/client/__init__.py
@@ -1,5 +1,5 @@
 from pathlib import Path
 
-from knot_resolver_manager.manager.datamodel.globals import Context, set_global_validation_context
+from knot_resolver_manager.datamodel.globals import Context, set_global_validation_context
 
 set_global_validation_context(Context(Path("."), False))
diff --git a/python/knot_resolver_manager/client/command.py b/python/knot_resolver_manager/client/command.py
index 6adb0dd9f..df7728588 100644
--- a/python/knot_resolver_manager/client/command.py
+++ b/python/knot_resolver_manager/client/command.py
@@ -6,8 +6,8 @@ from typing import Dict, List, Optional, Tuple, Type, TypeVar
 from urllib.parse import quote
 
 from knot_resolver_manager.manager.constants import API_SOCK_ENV_VAR, CONFIG_FILE_ENV_VAR, DEFAULT_MANAGER_CONFIG_FILE
-from knot_resolver_manager.manager.datamodel.config_schema import DEFAULT_MANAGER_API_SOCK
-from knot_resolver_manager.manager.datamodel.types import IPAddressPort
+from knot_resolver_manager.datamodel.config_schema import DEFAULT_MANAGER_API_SOCK
+from knot_resolver_manager.datamodel.types import IPAddressPort
 from knot_resolver_manager.utils.modeling import parsing
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 from knot_resolver_manager.utils.requests import SocketDesc
diff --git a/python/knot_resolver_manager/client/commands/cache.py b/python/knot_resolver_manager/client/commands/cache.py
index 42d28ce60..493c46d88 100644
--- a/python/knot_resolver_manager/client/commands/cache.py
+++ b/python/knot_resolver_manager/client/commands/cache.py
@@ -4,7 +4,7 @@ from enum import Enum
 from typing import Any, Dict, List, Optional, Tuple, Type
 
 from knot_resolver_manager.client.command import Command, CommandArgs, CompWords, register_command
-from knot_resolver_manager.manager.datamodel.cache_schema import CacheClearRPCSchema
+from knot_resolver_manager.datamodel.cache_schema import CacheClearRPCSchema
 from knot_resolver_manager.utils.modeling.exceptions import AggregateDataValidationError, DataValidationError
 from knot_resolver_manager.utils.modeling.parsing import DataFormat, parse_json
 from knot_resolver_manager.utils.requests import request
diff --git a/python/knot_resolver_manager/client/commands/convert.py b/python/knot_resolver_manager/client/commands/convert.py
index 157e07312..a468bf561 100644
--- a/python/knot_resolver_manager/client/commands/convert.py
+++ b/python/knot_resolver_manager/client/commands/convert.py
@@ -4,8 +4,8 @@ from pathlib import Path
 from typing import List, Optional, Tuple, Type
 
 from knot_resolver_manager.client.command import Command, CommandArgs, CompWords, register_command
-from knot_resolver_manager.manager.datamodel import KresConfig
-from knot_resolver_manager.manager.datamodel.globals import (
+from knot_resolver_manager.datamodel import KresConfig
+from knot_resolver_manager.datamodel.globals import (
     Context,
     reset_global_validation_context,
     set_global_validation_context,
diff --git a/python/knot_resolver_manager/client/commands/schema.py b/python/knot_resolver_manager/client/commands/schema.py
index 8e48022be..af7ad618c 100644
--- a/python/knot_resolver_manager/client/commands/schema.py
+++ b/python/knot_resolver_manager/client/commands/schema.py
@@ -4,7 +4,7 @@ import sys
 from typing import List, Optional, Tuple, Type
 
 from knot_resolver_manager.client.command import Command, CommandArgs, CompWords, register_command
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.utils.requests import request
 
 
diff --git a/python/knot_resolver_manager/client/commands/validate.py b/python/knot_resolver_manager/client/commands/validate.py
index 0b327b346..924244bdc 100644
--- a/python/knot_resolver_manager/client/commands/validate.py
+++ b/python/knot_resolver_manager/client/commands/validate.py
@@ -4,8 +4,8 @@ from pathlib import Path
 from typing import List, Tuple, Type
 
 from knot_resolver_manager.client.command import Command, CommandArgs, CompWords, register_command
-from knot_resolver_manager.manager.datamodel import KresConfig
-from knot_resolver_manager.manager.datamodel.globals import (
+from knot_resolver_manager.datamodel import KresConfig
+from knot_resolver_manager.datamodel.globals import (
     Context,
     reset_global_validation_context,
     set_global_validation_context,
diff --git a/python/knot_resolver_manager/controller/__init__.py b/python/knot_resolver_manager/controller/__init__.py
index 621ea7023..cfefa48ff 100644
--- a/python/knot_resolver_manager/controller/__init__.py
+++ b/python/knot_resolver_manager/controller/__init__.py
@@ -12,7 +12,7 @@ import asyncio
 import logging
 from typing import List, Optional
 
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.controller.interface import SubprocessController
 
 logger = logging.getLogger(__name__)
diff --git a/python/knot_resolver_manager/controller/interface.py b/python/knot_resolver_manager/controller/interface.py
index f5ca8c154..dfedb4b24 100644
--- a/python/knot_resolver_manager/controller/interface.py
+++ b/python/knot_resolver_manager/controller/interface.py
@@ -11,7 +11,7 @@ from typing import Dict, Iterable, Optional, Type, TypeVar
 from weakref import WeakValueDictionary
 
 from knot_resolver_manager.manager.constants import kresd_config_file, policy_loader_config_file
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.manager.exceptions import SubprocessControllerException
 from knot_resolver_manager.controller.registered_workers import register_worker, unregister_worker
 from knot_resolver_manager.utils.async_utils import writefile
diff --git a/python/knot_resolver_manager/controller/supervisord/__init__.py b/python/knot_resolver_manager/controller/supervisord/__init__.py
index 1d6f586cd..bf1429e39 100644
--- a/python/knot_resolver_manager/controller/supervisord/__init__.py
+++ b/python/knot_resolver_manager/controller/supervisord/__init__.py
@@ -8,7 +8,7 @@ import supervisor.xmlrpc  # type: ignore[import]
 
 from knot_resolver_manager.compat.asyncio import async_in_a_thread
 from knot_resolver_manager.manager.constants import supervisord_config_file, supervisord_pid_file, supervisord_sock_file
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.manager.exceptions import CancelStartupExecInsteadException, SubprocessControllerException
 from knot_resolver_manager.controller.interface import (
     KresID,
diff --git a/python/knot_resolver_manager/controller/supervisord/config_file.py b/python/knot_resolver_manager/controller/supervisord/config_file.py
index 388ac94dc..27da636c5 100644
--- a/python/knot_resolver_manager/controller/supervisord/config_file.py
+++ b/python/knot_resolver_manager/controller/supervisord/config_file.py
@@ -19,8 +19,8 @@ from knot_resolver_manager.manager.constants import (
     supervisord_subprocess_log_dir,
     user_constants,
 )
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
-from knot_resolver_manager.manager.datamodel.logging_schema import LogTargetEnum
+from knot_resolver_manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.logging_schema import LogTargetEnum
 from knot_resolver_manager.controller.interface import KresID, SubprocessType
 from knot_resolver_manager.utils.async_utils import read_resource, writefile
 
diff --git a/python/knot_resolver_manager/manager/datamodel/__init__.py b/python/knot_resolver_manager/datamodel/__init__.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/__init__.py
rename to python/knot_resolver_manager/datamodel/__init__.py
diff --git a/python/knot_resolver_manager/manager/datamodel/cache_schema.py b/python/knot_resolver_manager/datamodel/cache_schema.py
similarity index 97%
rename from python/knot_resolver_manager/manager/datamodel/cache_schema.py
rename to python/knot_resolver_manager/datamodel/cache_schema.py
index fd0247aac..4ed9fc3a8 100644
--- a/python/knot_resolver_manager/manager/datamodel/cache_schema.py
+++ b/python/knot_resolver_manager/datamodel/cache_schema.py
@@ -2,8 +2,8 @@ from typing import List, Optional, Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.templates import template_from_str
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.templates import template_from_str
+from knot_resolver_manager.datamodel.types import (
     DNSRecordTypeEnum,
     DomainName,
     EscapedStr,
diff --git a/python/knot_resolver_manager/manager/datamodel/config_schema.py b/python/knot_resolver_manager/datamodel/config_schema.py
similarity index 87%
rename from python/knot_resolver_manager/manager/datamodel/config_schema.py
rename to python/knot_resolver_manager/datamodel/config_schema.py
index 4201447b0..2f633d72c 100644
--- a/python/knot_resolver_manager/manager/datamodel/config_schema.py
+++ b/python/knot_resolver_manager/datamodel/config_schema.py
@@ -6,21 +6,21 @@ from typing import Any, Dict, List, Optional, Tuple, Union
 from typing_extensions import Literal
 
 from knot_resolver_manager.manager.constants import MAX_WORKERS
-from knot_resolver_manager.manager.datamodel.cache_schema import CacheSchema
-from knot_resolver_manager.manager.datamodel.dns64_schema import Dns64Schema
-from knot_resolver_manager.manager.datamodel.dnssec_schema import DnssecSchema
-from knot_resolver_manager.manager.datamodel.forward_schema import ForwardSchema
-from knot_resolver_manager.manager.datamodel.local_data_schema import LocalDataSchema, RPZSchema, RuleSchema
-from knot_resolver_manager.manager.datamodel.logging_schema import LoggingSchema
-from knot_resolver_manager.manager.datamodel.lua_schema import LuaSchema
-from knot_resolver_manager.manager.datamodel.management_schema import ManagementSchema
-from knot_resolver_manager.manager.datamodel.monitoring_schema import MonitoringSchema
-from knot_resolver_manager.manager.datamodel.network_schema import NetworkSchema
-from knot_resolver_manager.manager.datamodel.options_schema import OptionsSchema
-from knot_resolver_manager.manager.datamodel.templates import POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
-from knot_resolver_manager.manager.datamodel.types import EscapedStr, IntPositive, WritableDir
-from knot_resolver_manager.manager.datamodel.view_schema import ViewSchema
-from knot_resolver_manager.manager.datamodel.webmgmt_schema import WebmgmtSchema
+from knot_resolver_manager.datamodel.cache_schema import CacheSchema
+from knot_resolver_manager.datamodel.dns64_schema import Dns64Schema
+from knot_resolver_manager.datamodel.dnssec_schema import DnssecSchema
+from knot_resolver_manager.datamodel.forward_schema import ForwardSchema
+from knot_resolver_manager.datamodel.local_data_schema import LocalDataSchema, RPZSchema, RuleSchema
+from knot_resolver_manager.datamodel.logging_schema import LoggingSchema
+from knot_resolver_manager.datamodel.lua_schema import LuaSchema
+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 POLICY_CONFIG_TEMPLATE, WORKER_CONFIG_TEMPLATE
+from knot_resolver_manager.datamodel.types import EscapedStr, IntPositive, WritableDir
+from knot_resolver_manager.datamodel.view_schema import ViewSchema
+from knot_resolver_manager.datamodel.webmgmt_schema import WebmgmtSchema
 from knot_resolver_manager.utils.modeling import ConfigSchema
 from knot_resolver_manager.utils.modeling.base_schema import lazy_default
 from knot_resolver_manager.utils.modeling.exceptions import AggregateDataValidationError, DataValidationError
diff --git a/python/knot_resolver_manager/manager/datamodel/design-notes.yml b/python/knot_resolver_manager/datamodel/design-notes.yml
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/design-notes.yml
rename to python/knot_resolver_manager/datamodel/design-notes.yml
diff --git a/python/knot_resolver_manager/manager/datamodel/dns64_schema.py b/python/knot_resolver_manager/datamodel/dns64_schema.py
similarity index 85%
rename from python/knot_resolver_manager/manager/datamodel/dns64_schema.py
rename to python/knot_resolver_manager/datamodel/dns64_schema.py
index 35eb1fa6d..60b92f2b9 100644
--- a/python/knot_resolver_manager/manager/datamodel/dns64_schema.py
+++ b/python/knot_resolver_manager/datamodel/dns64_schema.py
@@ -1,6 +1,6 @@
 from typing import List, Optional
 
-from knot_resolver_manager.manager.datamodel.types import IPv6Network, IPv6Network96, TimeUnit
+from knot_resolver_manager.datamodel.types import IPv6Network, IPv6Network96, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/dnssec_schema.py b/python/knot_resolver_manager/datamodel/dnssec_schema.py
similarity index 94%
rename from python/knot_resolver_manager/manager/datamodel/dnssec_schema.py
rename to python/knot_resolver_manager/datamodel/dnssec_schema.py
index 44f7ee313..e51500e18 100644
--- a/python/knot_resolver_manager/manager/datamodel/dnssec_schema.py
+++ b/python/knot_resolver_manager/datamodel/dnssec_schema.py
@@ -1,6 +1,6 @@
 from typing import List, Optional
 
-from knot_resolver_manager.manager.datamodel.types import DomainName, EscapedStr, IntNonNegative, ReadableFile, TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, EscapedStr, IntNonNegative, ReadableFile, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/forward_schema.py b/python/knot_resolver_manager/datamodel/forward_schema.py
similarity index 97%
rename from python/knot_resolver_manager/manager/datamodel/forward_schema.py
rename to python/knot_resolver_manager/datamodel/forward_schema.py
index 923217f46..0804ef253 100644
--- a/python/knot_resolver_manager/manager/datamodel/forward_schema.py
+++ b/python/knot_resolver_manager/datamodel/forward_schema.py
@@ -2,7 +2,7 @@ from typing import Any, List, Optional, Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.types import (
     DomainName,
     IPAddressOptionalPort,
     ListOrItem,
diff --git a/python/knot_resolver_manager/manager/datamodel/globals.py b/python/knot_resolver_manager/datamodel/globals.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/globals.py
rename to python/knot_resolver_manager/datamodel/globals.py
diff --git a/python/knot_resolver_manager/manager/datamodel/local_data_schema.py b/python/knot_resolver_manager/datamodel/local_data_schema.py
similarity index 98%
rename from python/knot_resolver_manager/manager/datamodel/local_data_schema.py
rename to python/knot_resolver_manager/datamodel/local_data_schema.py
index 6e1a966c9..fafa7ebe2 100644
--- a/python/knot_resolver_manager/manager/datamodel/local_data_schema.py
+++ b/python/knot_resolver_manager/datamodel/local_data_schema.py
@@ -2,7 +2,7 @@ from typing import Dict, List, Optional
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.types import (
     DomainName,
     EscapedStr,
     IDPattern,
diff --git a/python/knot_resolver_manager/manager/datamodel/logging_schema.py b/python/knot_resolver_manager/datamodel/logging_schema.py
similarity index 98%
rename from python/knot_resolver_manager/manager/datamodel/logging_schema.py
rename to python/knot_resolver_manager/datamodel/logging_schema.py
index 46f36d5af..601cd4a54 100644
--- a/python/knot_resolver_manager/manager/datamodel/logging_schema.py
+++ b/python/knot_resolver_manager/datamodel/logging_schema.py
@@ -3,7 +3,7 @@ from typing import Any, List, Optional, Set, Type, Union, cast
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import TimeUnit, WritableFilePath
+from knot_resolver_manager.datamodel.types import TimeUnit, WritableFilePath
 from knot_resolver_manager.utils.modeling import ConfigSchema
 from knot_resolver_manager.utils.modeling.base_schema import is_obj_type_valid
 
diff --git a/python/knot_resolver_manager/manager/datamodel/lua_schema.py b/python/knot_resolver_manager/datamodel/lua_schema.py
similarity index 90%
rename from python/knot_resolver_manager/manager/datamodel/lua_schema.py
rename to python/knot_resolver_manager/datamodel/lua_schema.py
index 0dccc1849..079333ae8 100644
--- a/python/knot_resolver_manager/manager/datamodel/lua_schema.py
+++ b/python/knot_resolver_manager/datamodel/lua_schema.py
@@ -1,6 +1,6 @@
 from typing import Optional
 
-from knot_resolver_manager.manager.datamodel.types import ReadableFile
+from knot_resolver_manager.datamodel.types import ReadableFile
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/management_schema.py b/python/knot_resolver_manager/datamodel/management_schema.py
similarity index 86%
rename from python/knot_resolver_manager/manager/datamodel/management_schema.py
rename to python/knot_resolver_manager/datamodel/management_schema.py
index 4df4afa15..44f8f3e83 100644
--- a/python/knot_resolver_manager/manager/datamodel/management_schema.py
+++ b/python/knot_resolver_manager/datamodel/management_schema.py
@@ -1,6 +1,6 @@
 from typing import Optional
 
-from knot_resolver_manager.manager.datamodel.types import WritableFilePath, IPAddressPort
+from knot_resolver_manager.datamodel.types import WritableFilePath, IPAddressPort
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/monitoring_schema.py b/python/knot_resolver_manager/datamodel/monitoring_schema.py
similarity index 85%
rename from python/knot_resolver_manager/manager/datamodel/monitoring_schema.py
rename to python/knot_resolver_manager/datamodel/monitoring_schema.py
index 6e33b2f57..dfc4a1167 100644
--- a/python/knot_resolver_manager/manager/datamodel/monitoring_schema.py
+++ b/python/knot_resolver_manager/datamodel/monitoring_schema.py
@@ -2,7 +2,7 @@ from typing import Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import DomainName, EscapedStr, IPAddress, PortNumber, TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, EscapedStr, IPAddress, PortNumber, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/network_schema.py b/python/knot_resolver_manager/datamodel/network_schema.py
similarity index 99%
rename from python/knot_resolver_manager/manager/datamodel/network_schema.py
rename to python/knot_resolver_manager/datamodel/network_schema.py
index ae006f411..b9a35090f 100644
--- a/python/knot_resolver_manager/manager/datamodel/network_schema.py
+++ b/python/knot_resolver_manager/datamodel/network_schema.py
@@ -2,7 +2,7 @@ from typing import List, Optional, Union
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.types import (
     EscapedStr32B,
     WritableFilePath,
     Int0_512,
diff --git a/python/knot_resolver_manager/manager/datamodel/options_schema.py b/python/knot_resolver_manager/datamodel/options_schema.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/options_schema.py
rename to python/knot_resolver_manager/datamodel/options_schema.py
diff --git a/python/knot_resolver_manager/manager/datamodel/policy_schema.py b/python/knot_resolver_manager/datamodel/policy_schema.py
similarity index 94%
rename from python/knot_resolver_manager/manager/datamodel/policy_schema.py
rename to python/knot_resolver_manager/datamodel/policy_schema.py
index fb215188f..bbc61cd1b 100644
--- a/python/knot_resolver_manager/manager/datamodel/policy_schema.py
+++ b/python/knot_resolver_manager/datamodel/policy_schema.py
@@ -1,8 +1,8 @@
 from typing import List, Optional, Union
 
-from knot_resolver_manager.manager.datamodel.forward_schema import ForwardServerSchema
-from knot_resolver_manager.manager.datamodel.network_schema import AddressRenumberingSchema
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.forward_schema import ForwardServerSchema
+from knot_resolver_manager.datamodel.network_schema import AddressRenumberingSchema
+from knot_resolver_manager.datamodel.types import (
     DNSRecordTypeEnum,
     IPAddressOptionalPort,
     PolicyActionEnum,
diff --git a/python/knot_resolver_manager/manager/datamodel/rpz_schema.py b/python/knot_resolver_manager/datamodel/rpz_schema.py
similarity index 89%
rename from python/knot_resolver_manager/manager/datamodel/rpz_schema.py
rename to python/knot_resolver_manager/datamodel/rpz_schema.py
index e5dfe60ef..bf98bd0ca 100644
--- a/python/knot_resolver_manager/manager/datamodel/rpz_schema.py
+++ b/python/knot_resolver_manager/datamodel/rpz_schema.py
@@ -1,6 +1,6 @@
 from typing import List, Optional
 
-from knot_resolver_manager.manager.datamodel.types import PolicyActionEnum, PolicyFlagEnum, ReadableFile
+from knot_resolver_manager.datamodel.types import PolicyActionEnum, PolicyFlagEnum, ReadableFile
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/slice_schema.py b/python/knot_resolver_manager/datamodel/slice_schema.py
similarity index 87%
rename from python/knot_resolver_manager/manager/datamodel/slice_schema.py
rename to python/knot_resolver_manager/datamodel/slice_schema.py
index 3dacde989..0c7cdea19 100644
--- a/python/knot_resolver_manager/manager/datamodel/slice_schema.py
+++ b/python/knot_resolver_manager/datamodel/slice_schema.py
@@ -2,7 +2,7 @@ from typing import List, Optional
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.policy_schema import ActionSchema
+from knot_resolver_manager.datamodel.policy_schema import ActionSchema
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/static_hints_schema.py b/python/knot_resolver_manager/datamodel/static_hints_schema.py
similarity index 91%
rename from python/knot_resolver_manager/manager/datamodel/static_hints_schema.py
rename to python/knot_resolver_manager/datamodel/static_hints_schema.py
index 7a14aab3d..89db49bbb 100644
--- a/python/knot_resolver_manager/manager/datamodel/static_hints_schema.py
+++ b/python/knot_resolver_manager/datamodel/static_hints_schema.py
@@ -1,6 +1,6 @@
 from typing import Dict, List, Optional
 
-from knot_resolver_manager.manager.datamodel.types import DomainName, IPAddress, ReadableFile, TimeUnit
+from knot_resolver_manager.datamodel.types import DomainName, IPAddress, ReadableFile, TimeUnit
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/stub_zone_schema.py b/python/knot_resolver_manager/datamodel/stub_zone_schema.py
similarity index 87%
rename from python/knot_resolver_manager/manager/datamodel/stub_zone_schema.py
rename to python/knot_resolver_manager/datamodel/stub_zone_schema.py
index 9e48efe8a..b9945ecc5 100644
--- a/python/knot_resolver_manager/manager/datamodel/stub_zone_schema.py
+++ b/python/knot_resolver_manager/datamodel/stub_zone_schema.py
@@ -1,6 +1,6 @@
 from typing import List, Optional, Union
 
-from knot_resolver_manager.manager.datamodel.types import DomainName, IPAddressOptionalPort, PolicyFlagEnum
+from knot_resolver_manager.datamodel.types import DomainName, IPAddressOptionalPort, PolicyFlagEnum
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/__init__.py b/python/knot_resolver_manager/datamodel/templates/__init__.py
similarity index 87%
rename from python/knot_resolver_manager/manager/datamodel/templates/__init__.py
rename to python/knot_resolver_manager/datamodel/templates/__init__.py
index dc7b91e02..832503b7d 100644
--- a/python/knot_resolver_manager/manager/datamodel/templates/__init__.py
+++ b/python/knot_resolver_manager/datamodel/templates/__init__.py
@@ -5,13 +5,13 @@ from jinja2 import Environment, FileSystemLoader, Template
 
 
 def _get_templates_dir() -> str:
-    module = sys.modules["knot_resolver_manager.manager.datamodel"].__file__
+    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.manager.datamodel' cannot be located or loaded")
+    raise OSError("package 'knot_resolver_manager.datamodel' cannot be located or loaded")
 
 
 _TEMPLATES_DIR = _get_templates_dir()
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/cache.lua.j2 b/python/knot_resolver_manager/datamodel/templates/cache.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/cache.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/cache.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/dns64.lua.j2 b/python/knot_resolver_manager/datamodel/templates/dns64.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/dns64.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/dns64.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/dnssec.lua.j2 b/python/knot_resolver_manager/datamodel/templates/dnssec.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/dnssec.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/dnssec.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/forward.lua.j2 b/python/knot_resolver_manager/datamodel/templates/forward.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/forward.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/forward.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/local_data.lua.j2 b/python/knot_resolver_manager/datamodel/templates/local_data.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/local_data.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/local_data.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/logging.lua.j2 b/python/knot_resolver_manager/datamodel/templates/logging.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/logging.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/logging.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/cache_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/cache_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/cache_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/cache_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/common_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/common_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/common_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/common_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/forward_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/forward_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/forward_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/forward_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/local_data_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/local_data_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/local_data_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/local_data_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/network_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/network_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/network_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/network_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/policy_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/policy_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/policy_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/policy_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/macros/view_macros.lua.j2 b/python/knot_resolver_manager/datamodel/templates/macros/view_macros.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/macros/view_macros.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/macros/view_macros.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/monitoring.lua.j2 b/python/knot_resolver_manager/datamodel/templates/monitoring.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/monitoring.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/monitoring.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/network.lua.j2 b/python/knot_resolver_manager/datamodel/templates/network.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/network.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/network.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/options.lua.j2 b/python/knot_resolver_manager/datamodel/templates/options.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/options.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/options.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/policy-config.lua.j2 b/python/knot_resolver_manager/datamodel/templates/policy-config.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/policy-config.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/policy-config.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/static_hints.lua.j2 b/python/knot_resolver_manager/datamodel/templates/static_hints.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/static_hints.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/static_hints.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/views.lua.j2 b/python/knot_resolver_manager/datamodel/templates/views.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/views.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/views.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/webmgmt.lua.j2 b/python/knot_resolver_manager/datamodel/templates/webmgmt.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/webmgmt.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/webmgmt.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/templates/worker-config.lua.j2 b/python/knot_resolver_manager/datamodel/templates/worker-config.lua.j2
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/templates/worker-config.lua.j2
rename to python/knot_resolver_manager/datamodel/templates/worker-config.lua.j2
diff --git a/python/knot_resolver_manager/manager/datamodel/types/__init__.py b/python/knot_resolver_manager/datamodel/types/__init__.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/types/__init__.py
rename to python/knot_resolver_manager/datamodel/types/__init__.py
diff --git a/python/knot_resolver_manager/manager/datamodel/types/base_types.py b/python/knot_resolver_manager/datamodel/types/base_types.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/types/base_types.py
rename to python/knot_resolver_manager/datamodel/types/base_types.py
diff --git a/python/knot_resolver_manager/manager/datamodel/types/enums.py b/python/knot_resolver_manager/datamodel/types/enums.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/types/enums.py
rename to python/knot_resolver_manager/datamodel/types/enums.py
diff --git a/python/knot_resolver_manager/manager/datamodel/types/files.py b/python/knot_resolver_manager/datamodel/types/files.py
similarity index 98%
rename from python/knot_resolver_manager/manager/datamodel/types/files.py
rename to python/knot_resolver_manager/datamodel/types/files.py
index 94ce04dee..db496d201 100644
--- a/python/knot_resolver_manager/manager/datamodel/types/files.py
+++ b/python/knot_resolver_manager/datamodel/types/files.py
@@ -7,7 +7,7 @@ from pwd import getpwnam
 from typing import Any, Dict, Tuple, Type, TypeVar
 
 from knot_resolver_manager.manager.constants import kresd_group, kresd_user
-from knot_resolver_manager.manager.datamodel.globals import get_resolve_root, get_strict_validation
+from knot_resolver_manager.datamodel.globals import get_resolve_root, get_strict_validation
 from knot_resolver_manager.utils.modeling.base_value_type import BaseValueType
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/types/generic_types.py b/python/knot_resolver_manager/datamodel/types/generic_types.py
similarity index 100%
rename from python/knot_resolver_manager/manager/datamodel/types/generic_types.py
rename to python/knot_resolver_manager/datamodel/types/generic_types.py
diff --git a/python/knot_resolver_manager/manager/datamodel/types/types.py b/python/knot_resolver_manager/datamodel/types/types.py
similarity index 99%
rename from python/knot_resolver_manager/manager/datamodel/types/types.py
rename to python/knot_resolver_manager/datamodel/types/types.py
index 1d0199b75..d9a0b9105 100644
--- a/python/knot_resolver_manager/manager/datamodel/types/types.py
+++ b/python/knot_resolver_manager/datamodel/types/types.py
@@ -2,7 +2,7 @@ import ipaddress
 import re
 from typing import Any, Dict, Optional, Type, Union
 
-from knot_resolver_manager.manager.datamodel.types.base_types import (
+from knot_resolver_manager.datamodel.types.base_types import (
     IntRangeBase,
     PatternBase,
     StrBase,
diff --git a/python/knot_resolver_manager/manager/datamodel/view_schema.py b/python/knot_resolver_manager/datamodel/view_schema.py
similarity index 95%
rename from python/knot_resolver_manager/manager/datamodel/view_schema.py
rename to python/knot_resolver_manager/datamodel/view_schema.py
index 166306dfd..ad44eb3b3 100644
--- a/python/knot_resolver_manager/manager/datamodel/view_schema.py
+++ b/python/knot_resolver_manager/datamodel/view_schema.py
@@ -2,7 +2,7 @@ from typing import List, Optional
 
 from typing_extensions import Literal
 
-from knot_resolver_manager.manager.datamodel.types import IDPattern, IPNetwork
+from knot_resolver_manager.datamodel.types import IDPattern, IPNetwork
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/datamodel/webmgmt_schema.py b/python/knot_resolver_manager/datamodel/webmgmt_schema.py
similarity index 88%
rename from python/knot_resolver_manager/manager/datamodel/webmgmt_schema.py
rename to python/knot_resolver_manager/datamodel/webmgmt_schema.py
index 54a561f35..2e75c3b74 100644
--- a/python/knot_resolver_manager/manager/datamodel/webmgmt_schema.py
+++ b/python/knot_resolver_manager/datamodel/webmgmt_schema.py
@@ -1,6 +1,6 @@
 from typing import Optional
 
-from knot_resolver_manager.manager.datamodel.types import WritableFilePath, InterfacePort, ReadableFile
+from knot_resolver_manager.datamodel.types import WritableFilePath, InterfacePort, ReadableFile
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 
diff --git a/python/knot_resolver_manager/manager/__init__.py b/python/knot_resolver_manager/manager/__init__.py
index 3dc1f76bc..e69de29bb 100644
--- a/python/knot_resolver_manager/manager/__init__.py
+++ b/python/knot_resolver_manager/manager/__init__.py
@@ -1 +0,0 @@
-__version__ = "0.1.0"
diff --git a/python/knot_resolver_manager/manager/config_store.py b/python/knot_resolver_manager/manager/config_store.py
index 93786e962..0491bf461 100644
--- a/python/knot_resolver_manager/manager/config_store.py
+++ b/python/knot_resolver_manager/manager/config_store.py
@@ -2,7 +2,7 @@ import asyncio
 from asyncio import Lock
 from typing import Any, Awaitable, Callable, List, Tuple
 
-from knot_resolver_manager.manager.datamodel import KresConfig
+from knot_resolver_manager.datamodel import KresConfig
 from knot_resolver_manager.manager.exceptions import KresManagerException
 from knot_resolver_manager.utils.functional import Result
 from knot_resolver_manager.utils.modeling.exceptions import DataParsingError
diff --git a/python/knot_resolver_manager/manager/constants.py b/python/knot_resolver_manager/manager/constants.py
index e83a777ba..4d63a7368 100644
--- a/python/knot_resolver_manager/manager/constants.py
+++ b/python/knot_resolver_manager/manager/constants.py
@@ -12,7 +12,7 @@ else:
 
 if TYPE_CHECKING:
     from knot_resolver_manager.manager.config_store import ConfigStore
-    from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+    from knot_resolver_manager.datamodel.config_schema import KresConfig
     from knot_resolver_manager.controller.interface import KresID
 
 STARTUP_LOG_LEVEL = logging.DEBUG
diff --git a/python/knot_resolver_manager/manager/kres_manager.py b/python/knot_resolver_manager/manager/kres_manager.py
index 78459bd2b..e3d915135 100644
--- a/python/knot_resolver_manager/manager/kres_manager.py
+++ b/python/knot_resolver_manager/manager/kres_manager.py
@@ -31,7 +31,7 @@ from knot_resolver_manager.controller.registered_workers import (
 from knot_resolver_manager.utils.functional import Result
 from knot_resolver_manager.utils.modeling.types import NoneType
 
-from .datamodel import KresConfig
+from knot_resolver_manager import KresConfig
 
 logger = logging.getLogger(__name__)
 
diff --git a/python/knot_resolver_manager/manager/log.py b/python/knot_resolver_manager/manager/log.py
index 95043f89c..cd432e15d 100644
--- a/python/knot_resolver_manager/manager/log.py
+++ b/python/knot_resolver_manager/manager/log.py
@@ -6,8 +6,8 @@ from typing import Optional
 
 from knot_resolver_manager.manager.config_store import ConfigStore, only_on_real_changes_update
 from knot_resolver_manager.manager.constants import STARTUP_LOG_LEVEL
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
-from knot_resolver_manager.manager.datamodel.logging_schema import LogTargetEnum
+from knot_resolver_manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.logging_schema import LogTargetEnum
 
 logger = logging.getLogger(__name__)
 
diff --git a/python/knot_resolver_manager/manager/server.py b/python/knot_resolver_manager/manager/server.py
index 9570f5362..92569eeb5 100644
--- a/python/knot_resolver_manager/manager/server.py
+++ b/python/knot_resolver_manager/manager/server.py
@@ -23,10 +23,10 @@ from knot_resolver_manager.manager import log, statistics
 from knot_resolver_manager.compat import asyncio as asyncio_compat
 from knot_resolver_manager.manager.config_store import ConfigStore
 from knot_resolver_manager.manager.constants import DEFAULT_MANAGER_CONFIG_FILE, PID_FILE_NAME, init_user_constants
-from knot_resolver_manager.manager.datamodel.cache_schema import CacheClearRPCSchema
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig, get_rundir_without_validation
-from knot_resolver_manager.manager.datamodel.globals import Context, set_global_validation_context
-from knot_resolver_manager.manager.datamodel.management_schema import ManagementSchema
+from knot_resolver_manager.datamodel.cache_schema import CacheClearRPCSchema
+from knot_resolver_manager.datamodel.config_schema import KresConfig, get_rundir_without_validation
+from knot_resolver_manager.datamodel.globals import Context, set_global_validation_context
+from knot_resolver_manager.datamodel.management_schema import ManagementSchema
 from knot_resolver_manager.manager.exceptions import CancelStartupExecInsteadException, KresManagerException
 from knot_resolver_manager.controller import get_best_controller_implementation
 from knot_resolver_manager.controller.registered_workers import command_single_registered_worker
diff --git a/python/knot_resolver_manager/manager/statistics.py b/python/knot_resolver_manager/manager/statistics.py
index 5aa09b300..f3e9e4256 100644
--- a/python/knot_resolver_manager/manager/statistics.py
+++ b/python/knot_resolver_manager/manager/statistics.py
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Any, Dict, Generator, List, Optional, Tuple
 
 from knot_resolver_manager import compat
 from knot_resolver_manager.manager.config_store import ConfigStore, only_on_real_changes_update
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 from knot_resolver_manager.controller.registered_workers import (
     command_registered_workers,
     get_registered_workers_kresids,
diff --git a/setup.py b/setup.py
index bf1fb25e1..c2c4dfe6c 100644
--- a/setup.py
+++ b/setup.py
@@ -12,15 +12,15 @@ packages = \
  'knot_resolver_manager.controller',
  'knot_resolver_manager.controller.supervisord',
  'knot_resolver_manager.controller.supervisord.plugin',
+ 'knot_resolver_manager.datamodel',
+ 'knot_resolver_manager.datamodel.templates',
+ 'knot_resolver_manager.datamodel.types',
  'knot_resolver_manager.manager',
- 'knot_resolver_manager.manager.datamodel',
- 'knot_resolver_manager.manager.datamodel.templates',
- 'knot_resolver_manager.manager.datamodel.types',
  'knot_resolver_manager.utils',
  'knot_resolver_manager.utils.modeling']
 
 package_data = \
-{'': ['*'], 'knot_resolver_manager.manager.datamodel.templates': ['macros/*']}
+{'': ['*'], 'knot_resolver_manager.datamodel.templates': ['macros/*']}
 
 install_requires = \
 ['aiohttp', 'jinja2', 'pyyaml', 'supervisor', 'typing-extensions']
diff --git a/tests/manager/__init__.py b/tests/manager/__init__.py
index 2b1eb0f6d..d3c6280d4 100644
--- a/tests/manager/__init__.py
+++ b/tests/manager/__init__.py
@@ -1,5 +1,5 @@
 from pathlib import Path
 
-from knot_resolver_manager.manager.datamodel.globals import Context, set_global_validation_context
+from knot_resolver_manager.datamodel.globals import Context, set_global_validation_context
 
 set_global_validation_context(Context(Path("."), False))
diff --git a/tests/manager/datamodel/templates/test_cache_macros.py b/tests/manager/datamodel/templates/test_cache_macros.py
index 48a3882d2..155905c66 100644
--- a/tests/manager/datamodel/templates/test_cache_macros.py
+++ b/tests/manager/datamodel/templates/test_cache_macros.py
@@ -2,8 +2,8 @@ from typing import Any
 
 import pytest
 
-from knot_resolver_manager.manager.datamodel.cache_schema import CacheClearRPCSchema
-from knot_resolver_manager.manager.datamodel.templates import template_from_str
+from knot_resolver_manager.datamodel.cache_schema import CacheClearRPCSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
 
 
 @pytest.mark.parametrize(
diff --git a/tests/manager/datamodel/templates/test_common_macros.py b/tests/manager/datamodel/templates/test_common_macros.py
index 370b6847b..e64b278fd 100644
--- a/tests/manager/datamodel/templates/test_common_macros.py
+++ b/tests/manager/datamodel/templates/test_common_macros.py
@@ -1,5 +1,5 @@
-from knot_resolver_manager.manager.datamodel.forward_schema import ForwardServerSchema
-from knot_resolver_manager.manager.datamodel.templates 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/tests/manager/datamodel/templates/test_forward_macros.py b/tests/manager/datamodel/templates/test_forward_macros.py
index b4516d1d7..534c6007a 100644
--- a/tests/manager/datamodel/templates/test_forward_macros.py
+++ b/tests/manager/datamodel/templates/test_forward_macros.py
@@ -1,6 +1,6 @@
-from knot_resolver_manager.manager.datamodel.forward_schema import ForwardSchema
-from knot_resolver_manager.manager.datamodel.templates import template_from_str
-from knot_resolver_manager.manager.datamodel.types import IPAddressOptionalPort
+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
 
 
 def test_policy_rule_forward_add():
diff --git a/tests/manager/datamodel/templates/test_network_macros.py b/tests/manager/datamodel/templates/test_network_macros.py
index df14eb2d7..066463dff 100644
--- a/tests/manager/datamodel/templates/test_network_macros.py
+++ b/tests/manager/datamodel/templates/test_network_macros.py
@@ -1,5 +1,5 @@
-from knot_resolver_manager.manager.datamodel.network_schema import ListenSchema
-from knot_resolver_manager.manager.datamodel.templates 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/tests/manager/datamodel/templates/test_policy_macros.py b/tests/manager/datamodel/templates/test_policy_macros.py
index 28aa7b30f..a9804cd33 100644
--- a/tests/manager/datamodel/templates/test_policy_macros.py
+++ b/tests/manager/datamodel/templates/test_policy_macros.py
@@ -1,9 +1,9 @@
 from typing import List
 
-from knot_resolver_manager.manager.datamodel.network_schema import AddressRenumberingSchema
-from knot_resolver_manager.manager.datamodel.policy_schema import AnswerSchema
-from knot_resolver_manager.manager.datamodel.templates import template_from_str
-from knot_resolver_manager.manager.datamodel.types import PolicyFlagEnum
+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
 
 
 def test_policy_add():
diff --git a/tests/manager/datamodel/templates/test_types_render.py b/tests/manager/datamodel/templates/test_types_render.py
index e7fc92546..f83b41e34 100644
--- a/tests/manager/datamodel/templates/test_types_render.py
+++ b/tests/manager/datamodel/templates/test_types_render.py
@@ -3,7 +3,7 @@ from typing import Any
 import pytest
 from jinja2 import Template
 
-from knot_resolver_manager.manager.datamodel.types import EscapedStr
+from knot_resolver_manager.datamodel.types import EscapedStr
 from knot_resolver_manager.utils.modeling import ConfigSchema
 
 str_template = Template("'{{ string }}'")
diff --git a/tests/manager/datamodel/templates/test_view_macros.py b/tests/manager/datamodel/templates/test_view_macros.py
index c7547eba3..5f4956f85 100644
--- a/tests/manager/datamodel/templates/test_view_macros.py
+++ b/tests/manager/datamodel/templates/test_view_macros.py
@@ -2,8 +2,8 @@ from typing import Any
 
 import pytest
 
-from knot_resolver_manager.manager.datamodel.templates import template_from_str
-from knot_resolver_manager.manager.datamodel.view_schema import ViewOptionsSchema, ViewSchema
+from knot_resolver_manager.datamodel.templates import template_from_str
+from knot_resolver_manager.datamodel.view_schema import ViewOptionsSchema, ViewSchema
 
 
 def test_view_flags():
diff --git a/tests/manager/datamodel/test_config_schema.py b/tests/manager/datamodel/test_config_schema.py
index 8cc430c54..13a20f33f 100644
--- a/tests/manager/datamodel/test_config_schema.py
+++ b/tests/manager/datamodel/test_config_schema.py
@@ -2,8 +2,8 @@ import inspect
 import json
 from typing import Any, Dict, Type, cast
 
-from knot_resolver_manager.manager.datamodel import KresConfig
-from knot_resolver_manager.manager.datamodel.lua_schema import LuaSchema
+from knot_resolver_manager.datamodel import KresConfig
+from knot_resolver_manager.datamodel.lua_schema import LuaSchema
 from knot_resolver_manager.utils.modeling import BaseSchema
 from knot_resolver_manager.utils.modeling.types import (
     get_generic_type_argument,
diff --git a/tests/manager/datamodel/test_forward_schema.py b/tests/manager/datamodel/test_forward_schema.py
index b1f62720e..9ae77fe86 100644
--- a/tests/manager/datamodel/test_forward_schema.py
+++ b/tests/manager/datamodel/test_forward_schema.py
@@ -1,7 +1,7 @@
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.forward_schema import ForwardSchema
+from knot_resolver_manager.datamodel.forward_schema import ForwardSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/test_local_data.py b/tests/manager/datamodel/test_local_data.py
index ed02c8135..9842b0b2d 100644
--- a/tests/manager/datamodel/test_local_data.py
+++ b/tests/manager/datamodel/test_local_data.py
@@ -3,7 +3,7 @@ from typing import Any
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.local_data_schema import RuleSchema
+from knot_resolver_manager.datamodel.local_data_schema import RuleSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/test_lua_schema.py b/tests/manager/datamodel/test_lua_schema.py
index 4e174aff6..30d69bd99 100644
--- a/tests/manager/datamodel/test_lua_schema.py
+++ b/tests/manager/datamodel/test_lua_schema.py
@@ -1,6 +1,6 @@
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.lua_schema import LuaSchema
+from knot_resolver_manager.datamodel.lua_schema import LuaSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/test_management_schema.py b/tests/manager/datamodel/test_management_schema.py
index beef7b5f1..870e7208d 100644
--- a/tests/manager/datamodel/test_management_schema.py
+++ b/tests/manager/datamodel/test_management_schema.py
@@ -2,7 +2,7 @@ from typing import Any, Dict, Optional
 
 import pytest
 
-from knot_resolver_manager.manager.datamodel.management_schema import ManagementSchema
+from knot_resolver_manager.datamodel.management_schema import ManagementSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/test_network_schema.py b/tests/manager/datamodel/test_network_schema.py
index fb3093847..7b616f347 100644
--- a/tests/manager/datamodel/test_network_schema.py
+++ b/tests/manager/datamodel/test_network_schema.py
@@ -3,8 +3,8 @@ from typing import Any, Dict, Optional
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.network_schema import ListenSchema, NetworkSchema
-from knot_resolver_manager.manager.datamodel.types import InterfaceOptionalPort, PortNumber
+from knot_resolver_manager.datamodel.network_schema import ListenSchema, NetworkSchema
+from knot_resolver_manager.datamodel.types import InterfaceOptionalPort, PortNumber
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/test_policy_schema.py b/tests/manager/datamodel/test_policy_schema.py
index bbf1ab1b5..aeb98a71e 100644
--- a/tests/manager/datamodel/test_policy_schema.py
+++ b/tests/manager/datamodel/test_policy_schema.py
@@ -3,8 +3,8 @@ from typing import Any, Dict
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.policy_schema import ActionSchema, PolicySchema
-from knot_resolver_manager.manager.datamodel.types import PolicyActionEnum
+from knot_resolver_manager.datamodel.policy_schema import ActionSchema, PolicySchema
+from knot_resolver_manager.datamodel.types import PolicyActionEnum
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 from knot_resolver_manager.utils.modeling.types import get_generic_type_arguments
 
diff --git a/tests/manager/datamodel/test_rpz_schema.py b/tests/manager/datamodel/test_rpz_schema.py
index 16e23ca50..6603deed2 100644
--- a/tests/manager/datamodel/test_rpz_schema.py
+++ b/tests/manager/datamodel/test_rpz_schema.py
@@ -1,7 +1,7 @@
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.rpz_schema import RPZSchema
+from knot_resolver_manager.datamodel.rpz_schema import RPZSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 
 
diff --git a/tests/manager/datamodel/types/test_base_types.py b/tests/manager/datamodel/types/test_base_types.py
index 3479659f1..bee030c60 100644
--- a/tests/manager/datamodel/types/test_base_types.py
+++ b/tests/manager/datamodel/types/test_base_types.py
@@ -5,7 +5,7 @@ from typing import List, Optional
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.types.base_types import IntRangeBase, StringLengthBase
+from knot_resolver_manager.datamodel.types.base_types import IntRangeBase, StringLengthBase
 from knot_resolver_manager.manager.exceptions import KresManagerException
 
 
diff --git a/tests/manager/datamodel/types/test_custom_types.py b/tests/manager/datamodel/types/test_custom_types.py
index f11d6ea54..c82779c88 100644
--- a/tests/manager/datamodel/types/test_custom_types.py
+++ b/tests/manager/datamodel/types/test_custom_types.py
@@ -6,7 +6,7 @@ from typing import Any
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.types import (
+from knot_resolver_manager.datamodel.types import (
     Dir,
     DomainName,
     EscapedStr,
diff --git a/tests/manager/datamodel/types/test_generic_types.py b/tests/manager/datamodel/types/test_generic_types.py
index 39e1d6550..40b401897 100644
--- a/tests/manager/datamodel/types/test_generic_types.py
+++ b/tests/manager/datamodel/types/test_generic_types.py
@@ -3,7 +3,7 @@ from typing import Any, List, Optional, Union
 import pytest
 from pytest import raises
 
-from knot_resolver_manager.manager.datamodel.types import ListOrItem
+from knot_resolver_manager.datamodel.types import ListOrItem
 from knot_resolver_manager.utils.modeling import BaseSchema
 from knot_resolver_manager.utils.modeling.exceptions import DataValidationError
 from knot_resolver_manager.utils.modeling.types import get_generic_type_wrapper_argument
diff --git a/tests/manager/test_config_store.py b/tests/manager/test_config_store.py
index 343ce1421..28a1a4c83 100644
--- a/tests/manager/test_config_store.py
+++ b/tests/manager/test_config_store.py
@@ -1,7 +1,7 @@
 import pytest
 
 from knot_resolver_manager.manager.config_store import ConfigStore, only_on_real_changes_update
-from knot_resolver_manager.manager.datamodel.config_schema import KresConfig
+from knot_resolver_manager.datamodel.config_schema import KresConfig
 
 
 @pytest.mark.asyncio  # type: ignore
-- 
GitLab