send.py 1.19 KB
Newer Older
1 2
import json
from flask_restful import request, abort
Dan Jones's avatar
Dan Jones committed
3
from marshmallow import Schema, fields
4
import pika
5
from endpoints.auth_resource import AuthResource
6

7 8 9
class SendSchema(Schema):
    body = fields.Str(required=True)
    topic = fields.Str(required=True)
10

11
class Send(AuthResource):
12 13
    clients = None
    schema = None
14

15
    def __init__(self):
16
        super().__init__()
17
        self.schema = SendSchema()
18
    
19
    def post(self):
20 21
        args = request.get_json()
        errors = self.schema.validate(args)
22
        if errors:
23
            abort(400, message=str(errors))
24

25 26
        allow = self.auth(request)
        
27
        if allow:
28 29 30 31
            body = args.get("body")
            topic = args.get("topic")
            outbox_queue = self.client['client_id'] + "-outbox"
        
32 33
            connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))
            channel = connection.channel()
34
            channel.queue_declare(queue=outbox_queue, durable=True)
35 36 37 38
            message = {
                'topic': topic,
                'message': body,
            }
39 40
            channel.basic_publish(exchange="", routing_key=outbox_queue, body=json.dumps(message))
            connection.close()