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