import json from flask_restful import request, abort from marshmallow import Schema, fields import pika from endpoints.auth_resource import AuthResource class NotifySchema(Schema): body = fields.Str(required=True) class Notify(AuthResource): clients = None schema = None def __init__(self): super().__init__() self.schema = NotifySchema() def post(self): args = request.get_json() errors = self.schema.validate(args) if errors: abort(400, message=str(errors)) allow = False body = args.get("body") message = { 'topic': 'broadcast', 'message': body, } allow = self.auth(request) if allow: notify_queue = self.client['client_id'] + "-broadcast" connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost")) channel = connection.channel() channel.queue_declare(queue=notify_queue, durable=True) channel.basic_publish(exchange="", routing_key=notify_queue, body=json.dumps(message)) connection.close()