Source code for luna_configurator.app.handlers.puller_handler
# -*- coding: utf-8 -*-
"""Puller Handler
Module realize puller handler.Allows to get the corresponding JSON scheme
"""
from sanic.response import HTTPResponse
from crutches_on_wheels.errors.errors import Error
from crutches_on_wheels.errors.exception import VLException
from .base_handler import BaseRequestHandler
from .functions import jsonToConfigFileConverter
from app.handlers.schemas import TAGS_SCHEMA
[docs]class PullerHandler(BaseRequestHandler):
"""
Handler to get settings for exact service.
"""
[docs] async def post(self, serviceName: str) -> HTTPResponse:
"""
Request to receive most relevant settings for exact service. See `spec getPuller`_.
.. _`spec getPuller`:
_static/api.html#operation/getPuller
"""
settingNames = [limitation['limitation_name'] for limitation in (await self.dbContext.getLimitations())
if serviceName in limitation['services']]
if self.request.content_type == 'application/json':
settingNameAndTags = self.request.json
self.validateJson(settingNameAndTags, TAGS_SCHEMA, useJsonSchema=False)
else:
settingNameAndTags = {}
settings = await self.dbContext.getSettingsForPuller(settingNames, settingNameAndTags)
acceptHeaders = self.request.headers.get('Accept', 'application/json')
if 'application/x-vl-config-file' in acceptHeaders:
fileBody = jsonToConfigFileConverter(settings)
return self.success(body=fileBody, contentType='application/x-vl-config-file', statusCode=200)
elif 'application/json' in acceptHeaders or '*/*' in acceptHeaders:
return self.success(outputJson=settings, statusCode=200, contentType="application/json; charset=utf-8")
else:
raise VLException(Error.NotAcceptable.format('application/x-vl-config-file, '
'application/json'), 406, isCriticalError=False)