from flask_restful import request, abort from marshmallow import Schema, fields import pika import json from models.token import TokenModel from endpoints.auth_resource import AuthResource class ReceiveQuerySchema(Schema): max_messages = fields.Int(required=False) class Receive(AuthResource): clients = None schema = None def __init__(self): super().__init__() self.schema = ReceiveQuerySchema() def get(self): errors = self.schema.validate(request.args) if errors: abort(400, message=str(errors)) messages = [] max_messages = request.args.get("max_messages", 10) allow = self.auth(request) if allow: inbox_queue = self.client['client_id'] + "-inbox" 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