import time from flask import json, request from flask_classy import route from modules.core.core import cbpi from modules.core.db import DBModel from modules.core.baseview import BaseView from modules.database.dbmodel import Config class ConfigView(BaseView): model = Config cache_key = "config" @route('/', methods=["PUT"]) def put(self, name): """ Set new config value --- tags: - config responses: 204: description: New config value set """ data = request.json data["name"] = name update_data = {"name": data["name"], "value": data["value"]} if self.api.cache.get(self.cache_key) is not None: self.api.cache.get(self.cache_key)[name].__dict__.update(**update_data) m = self.model.update(**self.api.cache.get(self.cache_key)[name].__dict__) self._post_put_callback(self.api.cache.get(self.cache_key)[name]) self.api.emit("CONFIG_UPDATE", name=name, data=data["value"]) return json.dumps(self.api.cache.get(self.cache_key)[name].__dict__) @route('/', methods=["GET"]) def getOne(self, id): """ Get config parameter --- tags: - config responses: 400: description: Get one config parameter via web api is not supported """ return ('NOT SUPPORTED', 400) @route('/', methods=["DELETE"]) def delete(self, id): """ Delete config parameter --- tags: - config responses: 400: description: Deleting config parameter via web api is not supported """ return ('NOT SUPPORTED', 400) @route('/', methods=["POST"]) def post(self): """ Get config parameter --- tags: - config responses: 400: description: Adding new config parameter via web api is not supported """ return ('NOT SUPPORTED', 400) @classmethod def init_cache(cls): with cls.api._app.app_context(): cls.api.cache[cls.cache_key] = {} for key, value in cls.model.get_all().iteritems(): cls.post_init_callback(value) cls.api.cache[cls.cache_key][value.name] = value @cbpi.addon.core.initializer(order=0) def init(cbpi): ConfigView.register(cbpi._app, route_base='/api/config') ConfigView.init_cache()