notify.py 1.13 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 6
from endpoints.auth_resource import AuthResource

7

8 9
class NotifySchema(Schema):
    body = fields.Str(required=True)
10

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

15
    def __init__(self):
16
        super().__init__()
17
        self.schema = NotifySchema()
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
        allow = False
26
        body = args.get("body")
27 28 29 30
        message = {
            'topic': 'broadcast',
            'message': body,
        }
31

32 33
        allow = self.auth(request)
        
34
        if allow:
35
            notify_queue = self.client['client_id'] + "-broadcast"
36 37 38
            connection = pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))
            channel = connection.channel()
            channel.queue_declare(queue=notify_queue, durable=True)
39 40
            channel.basic_publish(exchange="", routing_key=notify_queue, body=json.dumps(message))
            connection.close()