diff options
Diffstat (limited to 'pysite/views/api/bot/settings.py')
-rw-r--r-- | pysite/views/api/bot/settings.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/pysite/views/api/bot/settings.py b/pysite/views/api/bot/settings.py new file mode 100644 index 00000000..a633a68a --- /dev/null +++ b/pysite/views/api/bot/settings.py @@ -0,0 +1,56 @@ +from flask import jsonify +from schema import Optional, Schema + +from pysite.base_route import APIView +from pysite.constants import ValidationTypes +from pysite.decorators import api_key, api_params +from pysite.mixins import DBMixin + +# todo: type safety +SETTINGS_KEYS_DEFAULTS = { + "defcon_enabled": False, + "defcon_days": 1 +} + +GET_SCHEMA = Schema({ + Optional("keys"): str +}) + + +def settings_schema(): + schema_dict = {Optional(key): type(SETTINGS_KEYS_DEFAULTS[key]) for key in SETTINGS_KEYS_DEFAULTS.keys()} + return Schema(schema_dict) + + +class ServerSettingsView(APIView, DBMixin): + path = "/bot/settings" + name = "bot.settings" + + @api_key + @api_params(schema=GET_SCHEMA, validation_type=ValidationTypes.params) + def get(self, params=None): + keys_raw = None + if params: + keys_raw = params.get("keys") + + keys = filter(lambda key: key in SETTINGS_KEYS_DEFAULTS, + keys_raw.split(",")) if keys_raw else SETTINGS_KEYS_DEFAULTS.keys() + + result = {key: (self.db.get("bot_settings", key) or {}).get("value") or SETTINGS_KEYS_DEFAULTS[key] for key in + keys} + return jsonify(result) + + @api_key + @api_params(schema=settings_schema(), validation_type=ValidationTypes.json) + def put(self, json_data): + # update in database + + for key, value in json_data.items(): + self.db.insert("bot_settings", { + "key": key, + "value": value + }, conflict="update") + + return jsonify({ + "success": True + }) |