import asyncio import traceback from fastapi import APIRouter, Request from common import * from models import DataModel from settings import settings router = APIRouter() @router.post("/") async def point(request: Request, items: DataModel): try: public_data: dict = restore_field(items.public) rdb = request.app.state.redis data_factory = request.app.state.data_factory output_factory = request.app.state.output_factory appid = items.public.get('b01') if not appid: return {'code': -1, 'msg': '必须要appid'} output_factory.name = settings.OUTPUT_NAME[appid] for item in items.data: data: dict = restore_field(item) sign = data.pop('sign') properties = data.pop('properties') if not check_sign(sign, settings.SALT.get(appid, ''), data, properties): # continue return {"code": -1, 'msg': '签名错误'} single_data = dict(**public_data, **data, properties=properties) check_preset(single_data) await asyncio.gather( *map(lambda o: asyncio.create_task(o(request, rdb, single_data)), data_factory.handler_link)) msg = data_factory.format_data(single_data) output_factory.send(msg) return {"code": 0, 'msg': 'ok'} except Exception as e: msg = traceback.format_exc() print(msg)