def _process_sent_message(self, path, data, req_data, headers): queue_url = _queue_url(path, req_data, headers) queue_name = queue_url.rpartition('/')[2] message_body = req_data.get('MessageBody', [None])[0] message_attributes = format_message_attributes(req_data) lambda_api.process_sqs_message(queue_name, message_body, message_attributes)
def forward_request(self, method, path, data, headers): if method == 'POST' and path == '/': req_data = urlparse.parse_qs(to_str(data)) if 'QueueName' in req_data: encoded_data = urlencode(req_data, doseq=True) request = Request(data=encoded_data, headers=headers, method=method) return request elif req_data.get('Action', [None])[0] == 'SendMessage': queue_url = req_data.get('QueueUrl', [None])[0] queue_name = queue_url[queue_url.rindex('/') + 1:] message_body = req_data.get('MessageBody', [None])[0] if lambda_api.process_sqs_message(message_body, queue_name): # If an lambda was listening, do not add the message to the queue new_response = Response() new_response._content = SUCCESSFUL_SEND_MESSAGE_XML_TEMPLATE.format( message_attr_hash=md5(data), message_body_hash=md5(message_body), message_id=str(uuid.uuid4()), ) new_response.status_code = 200 return new_response return True
def handle_send_message(queue_url, queue_name, message_body, message_attributes): url = 'http://localhost:4576/queue/' attr = VALID_ATTRIBUTE_NAMES[-2] q = QUEUE_ATTRIBUTES.get(queue_url) if (q and q['RedrivePolicy']): rp = json.loads(q['RedrivePolicy']) max_msg = rp['maxReceiveCount'] dl_queue_name = rp['deadLetterTargetArn'].rsplit(':')[-1] sqs_client = aws_stack.connect_to_service('sqs') no_of_msg = int( sqs_client.get_queue_attributes( QueueUrl=queue_url, AttributeNames=[attr])['Attributes'][attr]) receipt_handle = None if no_of_msg: receipt_handle = sqs_client.receive_message( QueueUrl=queue_url, AttributeNames=['ALL'])['Messages'][0]['ReceiptHandle'] queue_name = dl_queue_name if no_of_msg > max_msg else queue_name if no_of_msg > int(max_msg): message_attr = { "firstAttribute": { "DataType": "String", "StringValue": "hello world" }, "secondAttribute": { "DataType": "String", "StringValue": "goodbye world" } } message_attributes = message_attr dl_queue_url = url + dl_queue_name sqs_client.send_message(QueueUrl=dl_queue_url, MessageBody=message_body, MessageAttributes=message_attributes) sqs_client.delete_message(QueueUrl=queue_url, ReceiptHandle=receipt_handle) return lambda_api.process_sqs_message(queue_name, message_body, message_attributes) else: return lambda_api.process_sqs_message(queue_name, message_body, message_attributes)
def _send_message(self, path, data, req_data, headers): queue_url = self._queue_url(path, req_data, headers) queue_name = queue_url.rpartition('/')[2] message_body = req_data.get('MessageBody', [None])[0] message_attributes = self.format_message_attributes(req_data) process_result = lambda_api.process_sqs_message( message_body, message_attributes, queue_name) if process_result: # If a Lambda was listening, do not add the message to the queue new_response = Response() message_attr_hash = self.get_message_attributes_md5(req_data) new_response._content = SUCCESSFUL_SEND_MESSAGE_XML_TEMPLATE.format( message_attr_hash=message_attr_hash, message_body_hash=md5(message_body), message_id=str(uuid.uuid4())) new_response.status_code = 200 return new_response
def forward_request(self, method, path, data, headers): req_data = self.parse_request_data(method, path, data) if req_data: if req_data.get('Action', [None])[0] == 'SendMessage': queue_url = req_data.get('QueueUrl', [path.partition('?')[0]])[0] queue_name = queue_url[queue_url.rindex('/') + 1:] message_body = req_data.get('MessageBody', [None])[0] message_attributes = self.format_message_attributes(req_data) region_name = extract_region_from_auth_header(headers) process_result = lambda_api.process_sqs_message( message_body, message_attributes, queue_name, region_name=region_name) if process_result: # If a Lambda was listening, do not add the message to the queue new_response = Response() new_response._content = SUCCESSFUL_SEND_MESSAGE_XML_TEMPLATE.format( message_attr_hash=md5(data), message_body_hash=md5(message_body), message_id=str(uuid.uuid4())) new_response.status_code = 200 return new_response if 'QueueName' in req_data: encoded_data = urlencode( req_data, doseq=True) if method == 'POST' else '' modified_url = None if method == 'GET': base_path = path.partition('?')[0] modified_url = '%s?%s' % (base_path, urlencode(req_data, doseq=True)) request = Request(data=encoded_data, url=modified_url, headers=headers, method=method) return request return True
def _send_message(self, path, data, req_data, headers): queue_url = req_data.get('QueueUrl', [path.partition('?')[0]])[0] queue_name = queue_url[queue_url.rindex('/') + 1:] message_body = req_data.get('MessageBody', [None])[0] message_attributes = self.format_message_attributes(req_data) region_name = extract_region_from_auth_header(headers) process_result = lambda_api.process_sqs_message( message_body, message_attributes, queue_name, region_name=region_name) if process_result: # If a Lambda was listening, do not add the message to the queue new_response = Response() new_response._content = SUCCESSFUL_SEND_MESSAGE_XML_TEMPLATE.format( message_attr_hash=md5(data), message_body_hash=md5(message_body), message_id=str(uuid.uuid4())) new_response.status_code = 200 return new_response
def _process_sent_message(path, req_data, headers): queue_name = _queue_url(path, req_data, headers).rpartition('/')[2] lambda_api.process_sqs_message(queue_name)