from knot_resolver_manager.compat import asyncio as asyncio_compat
from knot_resolver_manager.config_store import ConfigStore
from knot_resolver_manager.constants import DEFAULT_MANAGER_CONFIG_FILE, PID_FILE_NAME, init_user_constants
+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,
from knot_resolver_manager.datamodel.management_schema import ManagementSchema
from knot_resolver_manager.exceptions import CancelStartupExecInsteadException, KresManagerException
from knot_resolver_manager.kresd_controller import get_best_controller_implementation
+from knot_resolver_manager.kresd_controller.registered_workers import command_single_registered_worker
from knot_resolver_manager.utils import ignore_exceptions_optional
from knot_resolver_manager.utils.async_utils import readfile
from knot_resolver_manager.utils.etag import structural_etag
from knot_resolver_manager.utils.functional import Result
-from knot_resolver_manager.utils.modeling.exceptions import DataParsingError, DataValidationError
+from knot_resolver_manager.utils.modeling.exceptions import (
+ AggregateDataValidationError,
+ DataParsingError,
+ DataValidationError,
+)
from knot_resolver_manager.utils.modeling.parsing import DataFormat, try_to_parse
from knot_resolver_manager.utils.modeling.query import query
from knot_resolver_manager.utils.modeling.types import NoneType
)
async def _handler_cache_clear(self, request: web.Request) -> web.Response:
+ data = parse_from_mime_type(await request.text(), request.content_type)
+
+ try:
+ config = CacheClearRPCSchema(data)
+ except (AggregateDataValidationError, DataValidationError) as e:
+ return web.Response(
+ body=e,
+ status=HTTPStatus.BAD_REQUEST,
+ content_type="text/plain",
+ charset="utf8",
+ )
+
+ _, result = await command_single_registered_worker(config.render_lua())
return web.Response(
- body="test",
- content_type="text/plain",
+ body=result,
+ content_type="application/json",
charset="utf8",
)