blivechat/views/config.py

66 lines
1.7 KiB
Python
Raw Normal View History

2019-06-12 13:55:49 +08:00
# -*- coding: utf-8 -*-
2019-10-13 21:04:03 +08:00
import json
2019-06-12 13:55:49 +08:00
import uuid
import views.base
from typing import *
2019-10-13 21:04:03 +08:00
MAX_CONFIG_SIZE = 100 * 1024
2019-06-12 13:55:49 +08:00
2019-10-13 21:04:03 +08:00
configs: Dict[str, dict] = {}
2019-06-12 13:55:49 +08:00
# noinspection PyAbstractClass
class ConfigsHandler(views.base.ApiHandler):
async def post(self):
2019-10-13 21:04:03 +08:00
if not isinstance(self.json_args, dict):
self.set_status(400)
return
config = self.json_args
2019-06-12 13:55:49 +08:00
config_id = str(uuid.uuid4())
config['id'] = config_id
2019-10-13 21:04:03 +08:00
config_str = json.dumps(config)
if len(config_str) > MAX_CONFIG_SIZE:
self.set_status(413)
return
2019-06-12 13:55:49 +08:00
configs[config_id] = config
2019-10-13 21:04:03 +08:00
self.write(config_str)
2019-06-12 13:55:49 +08:00
self.set_status(201)
2019-10-13 21:04:03 +08:00
self.set_header('Content-Type', 'application/json; charset=UTF-8')
2019-06-12 13:55:49 +08:00
if len(configs) > 10000:
for _, key in zip(range(100), configs):
del configs[key]
# noinspection PyAbstractClass
class ConfigHandler(views.base.ApiHandler):
async def put(self, config_id):
2019-10-13 21:04:03 +08:00
if config_id not in configs:
2019-06-12 13:55:49 +08:00
self.set_status(404)
return
2019-10-13 21:04:03 +08:00
if not isinstance(self.json_args, dict):
self.set_status(400)
return
config = self.json_args
config['id'] = config_id
config_str = json.dumps(config)
if len(config_str) > MAX_CONFIG_SIZE:
self.set_status(413)
return
configs[config_id] = config
self.write(config_str)
self.set_header('Content-Type', 'application/json; charset=UTF-8')
2019-06-12 13:55:49 +08:00
async def get(self, config_id):
config = configs.get(config_id, None)
if config is None:
self.set_status(404)
return
self.write(config)