# This file is automatically generated by botocraft. Do not edit directly.
# mypy: disable-error-code="index, override, assignment, union-attr, misc"
from botocraft.mixins.sqs import QueueModelMixin
from .abstract import (
Boto3Model,
ReadonlyBoto3Model,
PrimaryBoto3Model,
ReadonlyPrimaryBoto3Model,
Boto3ModelManager,
ReadonlyBoto3ModelManager,
)
from .abstract import PrimaryBoto3ModelQuerySet
from datetime import datetime
from botocraft.mixins.sqs import MessageModelMixin
import builtins
from botocraft.eventbridge.factory import AbstractEventFactory, EventFactory
from botocraft.mixins.sqs import queue_recieve_messages_add_queue_url
from botocraft.mixins.sqs import queue_recieve_messages_add_event_factory
from pydantic import Field
from botocraft.mixins.sqs import QueueManagerMixin
from collections import OrderedDict
from typing import ClassVar, Literal, Any, cast
from botocraft.mixins.sqs import queue_list_urls_to_queues
from botocraft.mixins.tags import TagsDictMixin
from .common import Tag
# ===============
# Managers
# ===============
[docs]class QueueManager(QueueManagerMixin, Boto3ModelManager):
service_name: str = "sqs"
[docs] def create(self, model: "Queue") -> str:
"""
Creates a new standard or FIFO queue. You can pass one or more attributes in the
request. Keep the following in mind:
Args:
model: The :py:class:`Queue` to create.
"""
data = model.model_dump(exclude_none=True, by_alias=True)
args = dict(
QueueName=data.get("QueueName"),
Attributes=data.get("Attributes"),
tags=data.get("tags"),
)
_response = self.client.create_queue(
**{k: v for k, v in args.items() if v is not None}
)
response = CreateQueueResult(**_response)
self.sessionize(response.QueueUrl)
return cast("str", response.QueueUrl)
[docs] def delete(self, QueueUrl: str) -> None:
"""
Deletes the queue specified by the ``QueueUrl``, regardless of the queue's
contents.
Args:
QueueUrl: The URL of the Amazon SQS queue to delete.
"""
args: dict[str, Any] = dict(QueueUrl=self.serialize(QueueUrl))
self.client.delete_queue(**{k: v for k, v in args.items() if v is not None})
[docs] @queue_list_urls_to_queues
def list(
self, *, QueueNamePrefix: "str | None" = None
) -> PrimaryBoto3ModelQuerySet:
"""
Returns a list of your queues in the current region. The response includes a
maximum of 1,000 results. If you specify a value for the optional
``QueueNamePrefix`` parameter, only queues with a name that begins with the
specified value are returned.
Keyword Args:
QueueNamePrefix: A string to use for filtering the list results. Only those queues whose name begins with the
specified string are returned.
"""
paginator = self.client.get_paginator("list_queues")
args: dict[str, Any] = dict(QueueNamePrefix=self.serialize(QueueNamePrefix))
response_iterator = paginator.paginate(
**{k: v for k, v in args.items() if v is not None}
)
results = []
for _response in response_iterator:
if list(_response.keys()) == ["ResponseMetadata"]:
break
if "ResponseMetadata" in _response:
del _response["ResponseMetadata"]
response = ListQueuesResult(**_response)
if response.QueueUrls:
results.extend(response.QueueUrls)
else:
if getattr(response, "NextToken", None):
continue
break
self.sessionize(results)
if results and isinstance(results[0], Boto3Model):
return PrimaryBoto3ModelQuerySet(results)
return results
[docs] def purge(self, QueueUrl: str) -> "None":
"""
Deletes available messages in a queue (including in-flight messages) specified
by the ``QueueURL`` parameter.
Args:
QueueUrl: The URL of the queue from which the ``PurgeQueue`` action deletes messages.
"""
args: dict[str, Any] = dict(QueueUrl=self.serialize(QueueUrl))
self.client.purge_queue(**{k: v for k, v in args.items() if v is not None})
[docs] def add_permission(
self,
QueueUrl: str,
Label: str,
AWSAccountIds: "builtins.list[str]",
Actions: "builtins.list[str]",
) -> "None":
"""
Adds a permission to a queue for a specific `principal <https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#P>`_.
This allows sharing access to the queue.
Args:
QueueUrl: The URL of the Amazon SQS queue to which permissions are added.
Label: The unique identification of the permission you're setting (for example, ``AliceSendMessage``). Maximum 80
characters. Allowed characters include alphanumeric characters, hyphens (``-``), and underscores (``_``).
AWSAccountIds: The Amazon Web Services account numbers of the `principals
<https://docs.aws.amazon.com/general/latest/gr/glos- chap.html#P>`_ who are to receive permission. For information
about locating the Amazon Web Services account identification, see `Your Amazon Web Services Identifiers
<https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-making-api- requests.html#sqs-api-
request-authentication>`_ in the *Amazon SQS Developer Guide*.
Actions: The action the client wants to allow for the specified principal. Valid values: the name of any action or
``*``.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
Label=self.serialize(Label),
AWSAccountIds=self.serialize(AWSAccountIds),
Actions=self.serialize(Actions),
)
self.client.add_permission(**{k: v for k, v in args.items() if v is not None})
[docs] def remove_permission(self, QueueUrl: str, Label: str) -> "None":
"""
Revokes any permissions in the queue policy that matches the specified ``Label``
parameter.
Args:
QueueUrl: The URL of the Amazon SQS queue from which permissions are removed.
Label: The identification of the permission to remove. This is the label added using the ``AddPermission`` action.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl), Label=self.serialize(Label)
)
self.client.remove_permission(
**{k: v for k, v in args.items() if v is not None}
)
[docs] def delete_message(self, QueueUrl: str, ReceiptHandle: str) -> "None":
"""
Deletes the specified message from the specified queue. To select the message to
delete, use the ``ReceiptHandle`` of the message (*not* the ``MessageId`` which
you receive when you send the message). Amazon SQS can delete a message from a
queue even if a visibility timeout setting causes the message to be locked by
another consumer. Amazon SQS automatically deletes messages left in a queue
longer than the retention period configured for the queue.
Args:
QueueUrl: The URL of the Amazon SQS queue from which messages are deleted.
ReceiptHandle: The receipt handle associated with the message to delete.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
ReceiptHandle=self.serialize(ReceiptHandle),
)
self.client.delete_message(**{k: v for k, v in args.items() if v is not None})
[docs] @queue_recieve_messages_add_queue_url
@queue_recieve_messages_add_event_factory
def receive_messages(
self,
QueueUrl: str,
*,
AttributeNames: "builtins.list[Literal['All', 'Policy', 'VisibilityTimeout', 'MaximumMessageSize', 'MessageRetentionPeriod', 'ApproximateNumberOfMessages', 'ApproximateNumberOfMessagesNotVisible', 'CreatedTimestamp', 'LastModifiedTimestamp', 'QueueArn', 'ApproximateNumberOfMessagesDelayed', 'DelaySeconds', 'ReceiveMessageWaitTimeSeconds', 'RedrivePolicy', 'FifoQueue', 'ContentBasedDeduplication', 'KmsMasterKeyId', 'KmsDataKeyReusePeriodSeconds', 'DeduplicationScope', 'FifoThroughputLimit', 'RedriveAllowPolicy', 'SqsManagedSseEnabled']] | None" = None,
MessageSystemAttributeNames: "builtins.list[Literal['All', 'SenderId', 'SentTimestamp', 'ApproximateReceiveCount', 'ApproximateFirstReceiveTimestamp', 'SequenceNumber', 'MessageDeduplicationId', 'MessageGroupId', 'AWSTraceHeader', 'DeadLetterQueueSourceArn']] | None" = None,
MessageAttributeNames: "builtins.list[str] | None" = None,
MaxNumberOfMessages: "int | None" = None,
VisibilityTimeout: "int | None" = None,
WaitTimeSeconds: "int | None" = None,
ReceiveRequestAttemptId: "str | None" = None,
EventFactoryClass: "type[AbstractEventFactory] | None" = None,
) -> "builtins.list[Message]":
"""
Retrieves one or more messages (up to 10), from the specified queue. Using the ``WaitTimeSeconds`` parameter enables
long-poll support. For more information, see `Amazon SQS Long
Polling <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html>`_ in the
*Amazon SQS Developer Guide*.
Args:
QueueUrl: The URL of the Amazon SQS queue from which messages are received.
Keyword Args:
AttributeNames: This parameter has been discontinued but will be supported for backward compatibility. To provide
attribute names, you are encouraged to use ``MessageSystemAttributeNames``.
MessageSystemAttributeNames: A list of attributes that need to be returned along with each message. These attributes
include:
MessageAttributeNames: The name of the message attribute, where *N* is the index.
MaxNumberOfMessages: The maximum number of messages to return. Amazon SQS never returns more messages than this
value (however, fewer messages might be returned). Valid values: 1 to 10. Default: 1.
VisibilityTimeout: The duration (in seconds) that the received messages are hidden from subsequent retrieve requests
after being retrieved by a ``ReceiveMessage`` request. If not specified, the default visibility timeout for the
queue is used, which is 30 seconds.
WaitTimeSeconds: The duration (in seconds) for which the call waits for a message to arrive in the queue before
returning. If a message is available, the call returns sooner than ``WaitTimeSeconds``. If no messages are available
and the wait time expires, the call does not return a message list. If you are using the Java SDK, it returns a
``ReceiveMessageResponse`` object, which has a empty list instead of a Null object.
ReceiveRequestAttemptId: This parameter applies only to FIFO (first-in-first-out) queues.
EventFactoryClass: The class to use to convert the message body to an event object. If not provided, the default
:py:class:`~botocraft.eventbridge.EventFactory` class will be used.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
AttributeNames=self.serialize(AttributeNames),
MessageSystemAttributeNames=self.serialize(MessageSystemAttributeNames),
MessageAttributeNames=self.serialize(MessageAttributeNames),
MaxNumberOfMessages=self.serialize(MaxNumberOfMessages),
VisibilityTimeout=self.serialize(VisibilityTimeout),
WaitTimeSeconds=self.serialize(WaitTimeSeconds),
ReceiveRequestAttemptId=self.serialize(ReceiveRequestAttemptId),
)
_response = self.client.receive_message(
**{k: v for k, v in args.items() if v is not None}
)
response = ReceiveMessageResult(**_response)
results: "builtins.list[Message]" = None
if response is not None:
results = response.Messages
self.sessionize(results)
return cast("builtins.list[Message]", results)
[docs] def batch_send_messages(
self, QueueUrl: str, Entries: "builtins.list[SendMessageBatchRequestEntry]"
) -> "SendMessageBatchResult":
"""
You can use ``SendMessageBatch`` to send up to 10 messages to the specified
queue by assigning either identical or different values to each message (or by
not assigning values at all). This is a batch version of ``SendMessage.`` For a
FIFO queue, multiple messages within a single batch are enqueued in the order
they are sent.
Args:
QueueUrl: The URL of the Amazon SQS queue to which batched messages are sent.
Entries: A list of ``SendMessageBatchRequestEntry`` items.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl), Entries=self.serialize(Entries)
)
_response = self.client.send_message_batch(
**{k: v for k, v in args.items() if v is not None}
)
response = SendMessageBatchResult(**_response)
results: "SendMessageBatchResult" = None
if response is not None:
results = response
self.sessionize(results)
return cast("SendMessageBatchResult", results)
[docs] def batch_delete_messages(
self, QueueUrl: str, Entries: "builtins.list[DeleteMessageBatchRequestEntry]"
) -> "DeleteMessageBatchResult":
"""
Deletes up to ten messages from the specified queue. This is a batch version of
``DeleteMessage.`` The result of the action on each message is reported
individually in the response.
Args:
QueueUrl: The URL of the Amazon SQS queue from which messages are deleted.
Entries: Lists the receipt handles for the messages to be deleted.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl), Entries=self.serialize(Entries)
)
_response = self.client.delete_message_batch(
**{k: v for k, v in args.items() if v is not None}
)
response = DeleteMessageBatchResult(**_response)
results: "DeleteMessageBatchResult" = None
if response is not None:
results = response
self.sessionize(results)
return cast("DeleteMessageBatchResult", results)
[docs] def change_message_visibility(
self, QueueUrl: str, ReceiptHandle: str, VisibilityTimeout: int
) -> "None":
"""
Changes the visibility timeout of a specified message in a queue to a new value. The default visibility timeout for a
message is 30 seconds. The minimum is 0 seconds. The maximum is 12 hours. For more information, see `Visibility
Timeout <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html>`_ in the
*Amazon SQS Developer Guide*.
Args:
QueueUrl: The URL of the Amazon SQS queue whose message's visibility is changed.
ReceiptHandle: The receipt handle associated with the message, whose visibility timeout is changed. This parameter
is returned by the ``ReceiveMessage`` action.
VisibilityTimeout: The new value for the message's visibility timeout (in seconds). Values range: ``0`` to
``43200``. Maximum: 12 hours.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
ReceiptHandle=self.serialize(ReceiptHandle),
VisibilityTimeout=self.serialize(VisibilityTimeout),
)
self.client.change_message_visibility(
**{k: v for k, v in args.items() if v is not None}
)
[docs] def change_message_visibility_batch(
self,
QueueUrl: str,
Entries: "builtins.list[ChangeMessageVisibilityBatchRequestEntry]",
) -> "ChangeMessageVisibilityBatchResult":
"""
Changes the visibility timeout of multiple messages. This is a batch version of
``ChangeMessageVisibility.`` The result of the action on each message is
reported individually in the response. You can send up to 10
``ChangeMessageVisibility`` requests with each ``ChangeMessageVisibilityBatch``
action.
Args:
QueueUrl: The URL of the Amazon SQS queue whose messages' visibility is changed.
Entries: Lists the receipt handles of the messages for which the visibility timeout must be changed.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl), Entries=self.serialize(Entries)
)
_response = self.client.change_message_visibility_batch(
**{k: v for k, v in args.items() if v is not None}
)
response = ChangeMessageVisibilityBatchResult(**_response)
results: "ChangeMessageVisibilityBatchResult" = None
if response is not None:
results = response
self.sessionize(results)
return cast("ChangeMessageVisibilityBatchResult", results)
[docs]class MessageManager(Boto3ModelManager):
service_name: str = "sqs"
[docs] def send(
self,
QueueUrl: str,
MessageBody: str,
*,
DelaySeconds: "int | None" = None,
MessageAttributes: "dict[str, MessageAttributeValue] | None" = None,
MessageSystemAttributes: "dict[Literal['AWSTraceHeader'], MessageSystemAttributeValue] | None" = None,
MessageDeduplicationId: "str | None" = None,
MessageGroupId: "str | None" = None,
) -> str:
"""
Delivers a message to the specified queue.
Args:
QueueUrl: The URL of the Amazon SQS queue to which a message is sent.
MessageBody: The message to send. The minimum size is one character. The maximum size is 1 MiB or 1,048,576 bytes
Keyword Args:
DelaySeconds: The length of time, in seconds, for which to delay a specific message. Valid values: 0 to 900.
Maximum: 15 minutes. Messages with a positive ``DelaySeconds`` value become available for processing after the delay
period is finished. If you don't specify a value, the default value for the queue applies.
MessageAttributes: Each message attribute consists of a ``Name``, ``Type``, and ``Value``. For more information, see
`Amazon SQS message attributes <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-
message-metadata.html#sqs- message-attributes>`_ in the *Amazon SQS Developer Guide*.
MessageSystemAttributes: The message system attribute to send. Each message system attribute consists of a ``Name``,
``Type``, and ``Value``.
MessageDeduplicationId: This parameter applies only to FIFO (first-in-first-out) queues.
MessageGroupId: ``MessageGroupId`` is an attribute used in Amazon SQS FIFO (First-In-First-Out) and standard queues.
In FIFO queues, ``MessageGroupId`` organizes messages into distinct groups. Messages within the same message group
are always processed one at a time, in strict order, ensuring that no two messages from the same group are processed
simultaneously. In standard queues, using ``MessageGroupId`` enables fair queues. It is used to identify the tenant
a message belongs to, helping maintain consistent message dwell time across all tenants during noisy neighbor
events. Unlike FIFO queues, messages with the same ``MessageGroupId`` can be processed in parallel, maintaining the
high throughput of standard queues.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
MessageBody=self.serialize(MessageBody),
DelaySeconds=self.serialize(DelaySeconds),
MessageAttributes=self.serialize(MessageAttributes),
MessageSystemAttributes=self.serialize(MessageSystemAttributes),
MessageDeduplicationId=self.serialize(MessageDeduplicationId),
MessageGroupId=self.serialize(MessageGroupId),
)
_response = self.client.send_message(
**{k: v for k, v in args.items() if v is not None}
)
response = SendMessageResult(**_response)
results: str = None
if response is not None:
results = response.MessageId
self.sessionize(results)
return cast("str", results)
[docs] def delete(self, QueueUrl: str, ReceiptHandle: str) -> None:
"""
Deletes the specified message from the specified queue. To select the message to
delete, use the ``ReceiptHandle`` of the message (*not* the ``MessageId`` which
you receive when you send the message). Amazon SQS can delete a message from a
queue even if a visibility timeout setting causes the message to be locked by
another consumer. Amazon SQS automatically deletes messages left in a queue
longer than the retention period configured for the queue.
Args:
QueueUrl: The URL of the Amazon SQS queue from which messages are deleted.
ReceiptHandle: The receipt handle associated with the message to delete.
"""
args: dict[str, Any] = dict(
QueueUrl=self.serialize(QueueUrl),
ReceiptHandle=self.serialize(ReceiptHandle),
)
self.client.delete_message(**{k: v for k, v in args.items() if v is not None})
# ==============
# Service Models
# ==============
[docs]class Queue(TagsDictMixin, QueueModelMixin, PrimaryBoto3Model):
tag_class: ClassVar[type[Boto3Model]] = Tag
manager_class: ClassVar[type[Boto3ModelManager]] = QueueManager
QueueUrl: str
"""
The URL of the queue.
This is a unique identifier for the queue.
"""
QueueName: str
"""
The name of the queue.
This is a unique identifier for the queue.
"""
Attributes: dict[str, str] | None = Field(default_factory=dict)
"""
The attributes of the queue.
This is a dictionary of attribute names and values.
"""
Tags: builtins.list[Tag] = Field(default_factory=list, alias="tags")
"""
The tags of the queue.
This is a list of Tag objects.
"""
@property
def pk(self) -> str | None:
"""
Return the primary key of the model. This is the value of the
:py:attr:`QueueUrl` attribute.
Returns:
The primary key of the model instance.
"""
return self.QueueUrl
@property
def name(self) -> str | None:
"""
Return the name of the model. This is the value of the :py:attr:`QueueName`
attribute.
Returns:
The name of the model instance.
"""
return self.QueueName
def __hash__(self) -> int:
"""
Return the hash of the model.
This is the value of the
:py:attr:`QueueUrl` attribute.
"""
return hash(self.QueueUrl)
[docs] def purge(self) -> "None":
"""
Purge the queue.
"""
return (
cast("QueueManager", self.objects) # type: ignore[attr-defined]
.using(self.session)
.purge(
cast("str", self.QueueUrl),
)
)
[docs] def add_permission(
self,
Label: str,
AWSAccountIds: "builtins.list[str]",
Actions: "builtins.list[str]",
) -> "None":
"""
Add permission to the queue.
Args:
Label: The unique identification of the permission you're setting (for example, ``AliceSendMessage``). Maximum 80
characters. Allowed characters include alphanumeric characters, hyphens (``-``), and underscores (``_``).
AWSAccountIds: The Amazon Web Services account numbers of the `principals
<https://docs.aws.amazon.com/general/latest/gr/glos- chap.html#P>`_ who are to receive permission. For information
about locating the Amazon Web Services account identification, see `Your Amazon Web Services Identifiers
<https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-making-api- requests.html#sqs-api-
request-authentication>`_ in the *Amazon SQS Developer Guide*.
Actions: The action the client wants to allow for the specified principal. Valid values: the name of any action or
``*``.
"""
return (
cast("QueueManager", self.objects) # type: ignore[attr-defined]
.using(self.session)
.add_permission(
cast("str", self.QueueUrl),
Label,
AWSAccountIds,
Actions,
)
)
[docs] def remove_permission(self, Label: str) -> "None":
"""
Remove permission from the queue.
Args:
Label: The identification of the permission to remove. This is the label added using the ``AddPermission`` action.
"""
return (
cast("QueueManager", self.objects) # type: ignore[attr-defined]
.using(self.session)
.remove_permission(
cast("str", self.QueueUrl),
Label,
)
)
[docs] def receive(
self,
MessageAttributeNames: "builtins.list[str] | None" = None,
MaxNumberOfMessages: "int | None" = None,
VisibilityTimeout: "int | None" = None,
WaitTimeSeconds: "int | None" = None,
ReceiveRequestAttemptId: "str | None" = None,
EventFactoryClass: "type[AbstractEventFactory] | None" = None,
) -> "builtins.list[Message]":
"""
Receive messages from the queue.
Keyword Args:
MessageAttributeNames: The name of the message attribute, where *N* is the index.
MaxNumberOfMessages: The maximum number of messages to return. Amazon SQS never returns more messages than this
value (however, fewer messages might be returned). Valid values: 1 to 10. Default: 1.
VisibilityTimeout: The duration (in seconds) that the received messages are hidden from subsequent retrieve requests
after being retrieved by a ``ReceiveMessage`` request. If not specified, the default visibility timeout for the
queue is used, which is 30 seconds.
WaitTimeSeconds: The duration (in seconds) for which the call waits for a message to arrive in the queue before
returning. If a message is available, the call returns sooner than ``WaitTimeSeconds``. If no messages are available
and the wait time expires, the call does not return a message list. If you are using the Java SDK, it returns a
``ReceiveMessageResponse`` object, which has a empty list instead of a Null object.
ReceiveRequestAttemptId: This parameter applies only to FIFO (first-in-first-out) queues.
EventFactoryClass: the value to set for EventFactoryClass
"""
return (
cast("QueueManager", self.objects) # type: ignore[attr-defined]
.using(self.session)
.receive_messages(
cast("str", self.QueueUrl),
MessageAttributeNames=MessageAttributeNames,
MaxNumberOfMessages=MaxNumberOfMessages,
VisibilityTimeout=VisibilityTimeout,
WaitTimeSeconds=WaitTimeSeconds,
ReceiveRequestAttemptId=ReceiveRequestAttemptId,
EventFactoryClass=EventFactoryClass,
)
)
[docs]class MessageAttributeValue(Boto3Model):
"""
The user-specified message attribute value. For string data types, the ``Value``
attribute has the same restrictions on the content as the message body. For more
information, see ``SendMessage.``
``Name``, ``type``, ``value`` and the message body must not be empty or null. All parts of the message attribute,
including ``Name``, ``Type``, and ``Value``, are part of the message size restriction (1 MiB or 1,048,576 bytes).
"""
StringValue: "str | None" = None
"""
Strings are Unicode with UTF-8 binary encoding.
For a list of code values, see
`ASCII Printable Characters <http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters>`_.
"""
BinaryValue: "bytes | None" = None
"""
Binary type attributes can store any binary data, such as compressed data, encrypted
data, or images.
"""
StringListValues: "builtins.list[str] | None" = Field(default_factory=list)
"""
Not implemented.
Reserved for future use.
"""
BinaryListValues: "builtins.list[bytes] | None" = Field(default_factory=list)
"""
Not implemented.
Reserved for future use.
"""
DataType: str
"""
Amazon SQS supports the following logical data types: ``String``, ``Number``, and ``Binary``. For the ``Number`` data
type, you must use ``StringValue``.
"""
[docs]class MessageSystemAttributeValue(Boto3Model):
"""
The user-specified message system attribute value. For string data types, the
``Value`` attribute has the same restrictions on the content as the message body.
For more information, see ``SendMessage.``
``Name``, ``type``, ``value`` and the message body must not be empty or null.
"""
StringValue: "str | None" = None
"""
Strings are Unicode with UTF-8 binary encoding.
For a list of code values, see
`ASCII Printable Characters <http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters>`_.
"""
BinaryValue: "bytes | None" = None
"""
Binary type attributes can store any binary data, such as compressed data, encrypted
data, or images.
"""
StringListValues: "builtins.list[str] | None" = Field(default_factory=list)
"""
Not implemented.
Reserved for future use.
"""
BinaryListValues: "builtins.list[bytes] | None" = Field(default_factory=list)
"""
Not implemented.
Reserved for future use.
"""
DataType: str
"""
Amazon SQS supports the following logical data types: ``String``, ``Number``, and ``Binary``. For the ``Number`` data
type, you must use ``StringValue``.
"""
[docs]class Message(MessageModelMixin, PrimaryBoto3Model):
"""
An Amazon SQS message.
"""
manager_class: ClassVar[type[Boto3ModelManager]] = MessageManager
MessageId: "str | None" = None
"""
A unique identifier for the message.
A ``MessageId``is considered unique across all Amazon Web Services accounts for an
extended period of time.
"""
ReceiptHandle: "str | None" = None
"""
An identifier associated with the act of receiving the message.
A new receipt handle is returned every time you receive a message. When deleting a
message, you provide the last received receipt handle to delete the message.
"""
MD5OfBody: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message body string.
"""
Body: "str | None" = None
"""
The message's contents (not URL-encoded).
"""
Attributes: "dict[Literal['All', 'SenderId', 'SentTimestamp', 'ApproximateReceiveCount', 'ApproximateFirstReceiveTimestamp', 'SequenceNumber', 'MessageDeduplicationId', 'MessageGroupId', 'AWSTraceHeader', 'DeadLetterQueueSourceArn'], str] | None" = Field(
default_factory=dict
)
"""
A map of the attributes requested in ``ReceiveMessage`` to their respective
values.
Supported attributes:
"""
MD5OfMessageAttributes: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message attribute string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
MessageAttributes: "dict[str, MessageAttributeValue] | None" = Field(
default_factory=dict
)
"""
Each message attribute consists of a ``Name``, ``Type``, and ``Value``.
For more information, see
`Amazon SQS message attributes <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-
message-attributes>`_ in the *Amazon SQS Developer Guide*.
"""
QueueUrl: "str | None" = None
"""
The URL of the queue.
This is a unique identifier for the queue.
"""
EventFactoryClass: "type[AbstractEventFactory] | None" = EventFactory
"""
The factory class for the event.
This is used to create events from messages received from the queue.
"""
@property
def pk(self) -> OrderedDict[str, Any]:
"""
The primary key of the message.
This can be used to delete the message from its queue with the :py:meth:`botocraft.services.sqs.MessageManager.delete` method.
"""
return OrderedDict(
{
"QueueUrl": self.QueueUrl,
"ReceiptHandle": self.ReceiptHandle,
}
)
[docs] def send(
self,
DelaySeconds: "int | None" = None,
MessageDeduplicationId: "str | None" = None,
MessageGroupId: "str | None" = None,
) -> "str":
"""
Send this message to the queue.
Keyword Args:
DelaySeconds: The length of time, in seconds, for which to delay a specific message. Valid values: 0 to 900.
Maximum: 15 minutes. Messages with a positive ``DelaySeconds`` value become available for processing after the delay
period is finished. If you don't specify a value, the default value for the queue applies.
MessageDeduplicationId: This parameter applies only to FIFO (first-in-first-out) queues.
MessageGroupId: ``MessageGroupId`` is an attribute used in Amazon SQS FIFO (First-In-First-Out) and standard queues.
In FIFO queues, ``MessageGroupId`` organizes messages into distinct groups. Messages within the same message group
are always processed one at a time, in strict order, ensuring that no two messages from the same group are processed
simultaneously. In standard queues, using ``MessageGroupId`` enables fair queues. It is used to identify the tenant
a message belongs to, helping maintain consistent message dwell time across all tenants during noisy neighbor
events. Unlike FIFO queues, messages with the same ``MessageGroupId`` can be processed in parallel, maintaining the
high throughput of standard queues.
"""
return (
cast("MessageManager", self.objects) # type: ignore[attr-defined]
.using(self.session)
.send(
cast("str", self.QueueUrl),
cast("str", self.MessageBody),
MessageAttributes=cast(
"dict[str, MessageAttributeValue] | None", self.MessageAttributes
),
DelaySeconds=DelaySeconds,
MessageDeduplicationId=MessageDeduplicationId,
MessageGroupId=MessageGroupId,
)
)
# =======================
# Request/Response Models
# =======================
[docs]class CreateQueueResult(Boto3Model):
"""
Returns the ``QueueUrl`` attribute of the created queue.
"""
QueueUrl: "str | None" = None
"""
The URL of the created Amazon SQS queue.
"""
[docs]class ListQueuesResult(Boto3Model):
"""
A list of your queues.
"""
QueueUrls: "builtins.list[str] | None" = Field(default_factory=list)
"""
A list of queue URLs, up to 1,000 entries, or the value of ``MaxResults`` that you
sent in the request.
"""
NextToken: "str | None" = None
"""
Pagination token to include in the next request.
Token value is ``null`` if there are no additional results to request,
or if you did not set ``MaxResults`` in the request.
"""
[docs]class ReceiveMessageResult(Boto3Model):
"""
A list of received messages.
"""
Messages: "builtins.list[Message] | None" = Field(default_factory=list)
"""
A list of messages.
"""
[docs]class SendMessageBatchRequestEntry(Boto3Model):
"""
Contains the details of a single Amazon SQS message along with an ``Id``.
"""
Id: str
"""
An identifier for a message in this batch used to communicate the result.
"""
MessageBody: str
"""
The body of the message.
"""
DelaySeconds: "int | None" = None
"""
The length of time, in seconds, for which a specific message is delayed.
Valid values: 0 to 900. Maximum: 15 minutes.
Messages with a positive ``DelaySeconds`` value become available for processing after the delay period is finished. If
you don't specify a value, the default value for the queue is applied.
"""
MessageAttributes: "dict[str, MessageAttributeValue] | None" = Field(
default_factory=dict
)
"""
Each message attribute consists of a ``Name``, ``Type``, and ``Value``.
For more information, see
`Amazon SQS message attributes <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-metadata.html#sqs-
message-attributes>`_ in the *Amazon SQS Developer Guide*.
"""
MessageSystemAttributes: "dict[Literal['AWSTraceHeader'], MessageSystemAttributeValue] | None" = Field(
default_factory=dict
)
"""
The message system attribute to send Each message system attribute consists of a
``Name``, ``Type``, and ``Value``.
"""
MessageDeduplicationId: "str | None" = None
"""
This parameter applies only to FIFO (first-in-first-out) queues.
"""
MessageGroupId: "str | None" = None
"""
``MessageGroupId`` is an attribute used in Amazon SQS FIFO (First-In-First-Out) and
standard queues.
In FIFO queues,
``MessageGroupId`` organizes messages into distinct groups. Messages within the same message group are always processed
one at a time, in strict order, ensuring that no two messages from the same group are processed simultaneously. In
standard queues, using ``MessageGroupId`` enables fair queues. It is used to identify the tenant a message belongs to,
helping maintain consistent message dwell time across all tenants during noisy neighbor events. Unlike FIFO queues,
messages with the same ``MessageGroupId`` can be processed in parallel, maintaining the high throughput of standard
queues.
"""
[docs]class SendMessageBatchResultEntry(Boto3Model):
"""
Encloses a ``MessageId`` for a successfully-enqueued message in a
``SendMessageBatch.``
"""
Id: str
"""
An identifier for the message in this batch.
"""
MessageId: str
"""
An identifier for the message.
"""
MD5OfMessageBody: str
"""
An MD5 digest of the non-URL-encoded message body string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
MD5OfMessageAttributes: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message attribute string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
MD5OfMessageSystemAttributes: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message system attribute string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
SequenceNumber: "str | None" = None
"""
This parameter applies only to FIFO (first-in-first-out) queues.
"""
[docs]class BatchResultErrorEntry(Boto3Model):
"""
Gives a detailed description of the result of an action on each entry in the
request.
"""
Id: str
"""
The ``Id`` of an entry in a batch request.
"""
SenderFault: bool
"""
Specifies whether the error happened due to the caller of the batch API action.
"""
Code: str
"""
An error code representing why the action failed on this entry.
"""
Message: "str | None" = None
"""
A message explaining why the action failed on this entry.
"""
[docs]class SendMessageBatchResult(Boto3Model):
"""
For each message in the batch, the response contains a
``SendMessageBatchResultEntry`` tag if the message succeeds or a
``BatchResultErrorEntry`` tag if the message fails.
"""
Successful: "builtins.list[SendMessageBatchResultEntry]"
"""
A list of ``SendMessageBatchResultEntry`` items.
"""
Failed: "builtins.list[BatchResultErrorEntry]"
"""
A list of ``BatchResultErrorEntry`` items with error details about each message
that can't be enqueued.
"""
[docs]class DeleteMessageBatchRequestEntry(Boto3Model):
"""
Encloses a receipt handle and an identifier for it.
"""
Id: str
"""
The identifier for this particular receipt handle.
This is used to communicate the result.
"""
ReceiptHandle: str
"""
A receipt handle.
"""
[docs]class DeleteMessageBatchResultEntry(Boto3Model):
"""
Encloses the ``Id`` of an entry in ``DeleteMessageBatch.``
"""
Id: str
"""
Represents a successfully deleted message.
"""
[docs]class DeleteMessageBatchResult(Boto3Model):
"""
For each message in the batch, the response contains a
``DeleteMessageBatchResultEntry`` tag if the message is deleted or a
``BatchResultErrorEntry`` tag if the message can't be deleted.
"""
Successful: "builtins.list[DeleteMessageBatchResultEntry]"
"""
A list of ``DeleteMessageBatchResultEntry`` items.
"""
Failed: "builtins.list[BatchResultErrorEntry]"
"""
A list of ``BatchResultErrorEntry`` items.
"""
[docs]class ChangeMessageVisibilityBatchRequestEntry(Boto3Model):
"""
Encloses a receipt handle and an entry ID for each message in
``ChangeMessageVisibilityBatch.``
"""
Id: str
"""
An identifier for this particular receipt handle used to communicate the result.
"""
ReceiptHandle: str
"""
A receipt handle.
"""
VisibilityTimeout: "int | None" = None
"""
The new value (in seconds) for the message's visibility timeout.
"""
[docs]class ChangeMessageVisibilityBatchResultEntry(Boto3Model):
"""
Encloses the ``Id`` of an entry in ``ChangeMessageVisibilityBatch.``
"""
Id: str
"""
Represents a message whose visibility timeout has been changed successfully.
"""
[docs]class ChangeMessageVisibilityBatchResult(Boto3Model):
"""
For each message in the batch, the response contains a
``ChangeMessageVisibilityBatchResultEntry`` tag if the message succeeds or a
``BatchResultErrorEntry`` tag if the message fails.
"""
Successful: "builtins.list[ChangeMessageVisibilityBatchResultEntry]"
"""
A list of ``ChangeMessageVisibilityBatchResultEntry`` items.
"""
Failed: "builtins.list[BatchResultErrorEntry]"
"""
A list of ``BatchResultErrorEntry`` items.
"""
[docs]class SendMessageResult(Boto3Model):
"""
The ``MD5OfMessageBody`` and ``MessageId`` elements.
"""
MD5OfMessageBody: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message body string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
MD5OfMessageAttributes: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message attribute string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest. For information
about MD5, see
`RFC1321 <https://www.ietf.org/rfc/rfc1321.txt>`_.
"""
MD5OfMessageSystemAttributes: "str | None" = None
"""
An MD5 digest of the non-URL-encoded message system attribute string.
You can use this attribute to verify that Amazon SQS received the message correctly.
Amazon SQS URL-decodes the message before creating the MD5 digest.
"""
MessageId: "str | None" = None
"""
An attribute containing the ``MessageId`` of the message sent to the queue.
For more information, see
`Queue and Message Identifiers <https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-
identifiers.html>`_ in the *Amazon SQS Developer Guide*.
"""
SequenceNumber: "str | None" = None
"""
This parameter applies only to FIFO (first-in-first-out) queues.
"""