Source code for luna_configurator.app.handlers.dump_handler

# -*- coding: utf-8 -*-
"""Dump Handler

Module realize dump handler.
"""
from datetime import datetime

import ujson
from sanic.response import HTTPResponse

from app.handlers.base_handler import BaseRequestHandler


[docs]class DumpHandler(BaseRequestHandler): """ Handler to operate with dump-file. """
[docs] async def get(self) -> HTTPResponse: """ Get json file with custom limitations and settings. See `spec_getDumpFile`_. .. _spec_getDumpFile: _static/api.html#operation/getDumpFile Resource is reached by address '/dump' """ deletionNames = ("id", "create_time", "is_default", "last_update_time") limitations = sorted( (await self.dbContext.getLimitations(returnGroupNames=True)), key=lambda column: column["limitation_name"] ) limitationNames = [limitation["limitation_name"] for limitation in limitations] settingsList = (await self.dbContext.getSettingsByFilters(limitationNames, pageSize=-1))[0] for setting in settingsList: for name in deletionNames: if name in setting: del setting[name] settings = sorted(settingsList, key=lambda column: (column["name"], column["tags"])) groups = await self.dbContext.getGroups() currentDateTime = datetime.now().strftime("%Y-%m-%dT%H-%M-%S") version = await self.dbContext.getRevision() outputJson = ujson.dumps( {"limitations": limitations, "settings": settings, "groups": groups, "version": version}, ensure_ascii=False, indent=4, ) return self.success( extraHeaders={"Content-Disposition": f"attachment; filename=luna-configurator-dump-{currentDateTime}.json"}, contentType="application/json; charset=utf-8", body=outputJson, )