Source code for mersal.outbox.outbox_message_batch
from collections.abc import Iterable, Iterator, Sequence
from typing import overload
from mersal.outbox.outbox_message import OutboxMessage
from mersal.types import AsyncAnyCallable
__all__ = ("OutboxMessage", "OutboxMessageBatch")
[docs]
class OutboxMessageBatch(Sequence[OutboxMessage]):
[docs]
def __init__(
self,
messages: Iterable[OutboxMessage],
complete_action: AsyncAnyCallable,
close_action: AsyncAnyCallable,
) -> None:
self._messages = list(messages)
self._complete_action = complete_action
self._close_action = close_action
async def complete(self) -> None:
await self._complete_action()
async def close(self) -> None:
await self._close_action()
def __len__(self) -> int:
return len(self._messages)
def __iter__(self) -> Iterator[OutboxMessage]:
return iter(self._messages)
@overload
def __getitem__(self, index: int) -> OutboxMessage: ...
@overload
def __getitem__(self, index: slice) -> Sequence[OutboxMessage]: ...
def __getitem__(self, index: int | slice) -> OutboxMessage | Sequence[OutboxMessage]:
return self._messages[index]