Source code for mersal.idempotency.plugin
from __future__ import annotations
from typing import TYPE_CHECKING
from mersal.idempotency.idempotency_checker_step import IdempotencyCheckerStep
from mersal.pipeline import PipelineInjectionPosition, PipelineInjector
from mersal.pipeline.pipeline import IncomingPipeline, Pipeline
from mersal.pipeline.receive.dispatch_incoming_message_step import (
DispatchIncomingMessageStep,
)
from mersal.plugins import Plugin
if TYPE_CHECKING:
from mersal.configuration import StandardConfigurator
from mersal.idempotency.config import IdempotencyConfig
__all__ = ("IdempotencyPlugin",)
[docs]
class IdempotencyPlugin(Plugin):
[docs]
def __init__(self, config: IdempotencyConfig):
self._config = config
def __call__(self, configurator: StandardConfigurator) -> None:
def decorate_pipeline(configurator: StandardConfigurator) -> Pipeline:
step = IdempotencyCheckerStep(
message_tracker=self._config.tracker,
stop_invocation=self._config.should_stop_invocation,
)
pipeline = PipelineInjector(configurator.get(IncomingPipeline)) # type: ignore[type-abstract]
pipeline.inject_step(step, PipelineInjectionPosition.BEFORE, DispatchIncomingMessageStep)
return pipeline
configurator.decorate(IncomingPipeline, decorate_pipeline)