receive.py 1.53 KB
Newer Older
1
from flask_restful import request, abort
2 3 4
from marshmallow import Schema, fields
import pika
import json
5 6
from models.token import TokenModel
from endpoints.auth_resource import AuthResource
7 8


9
class ReceiveQuerySchema(Schema):
10 11 12
    max_messages = fields.Int(required=False)


13
class Receive(AuthResource):
14 15 16 17
    clients = None
    schema = None

    def __init__(self):
18
        super().__init__()
19
        self.schema = ReceiveQuerySchema()
20 21 22 23

    def get(self):
        errors = self.schema.validate(request.args)
        if errors:
24
            abort(400, message=str(errors))
25 26 27

        messages = []
        max_messages = request.args.get("max_messages", 10)
28 29 30 31 32
        
        allow = self.auth(request)
        if allow:
            inbox_queue = self.client['client_id'] + "-inbox"
    
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
        if allow:
            connection = pika.BlockingConnection(
                pika.ConnectionParameters(host="localhost")
            )
            channel = connection.channel()
            channel.queue_declare(queue=inbox_queue, durable=True)
            while len(messages) < max_messages:
                method_frame, header_frame, body = channel.basic_get(inbox_queue)
                if method_frame:
                    print(method_frame, header_frame, body)
                    channel.basic_ack(method_frame.delivery_tag)
                    messages.append(json.loads(body.decode()))
                else:
                    print("No message returned")
                    break
            channel.close()
            connection.close()
        return messages