diff --git a/setup.py b/setup.py index bd8015d9..771965f8 100644 --- a/setup.py +++ b/setup.py @@ -69,6 +69,7 @@ install_requires=[ "click", # Use same version as eth-ape "eth-ape>=0.7.0,<1.0", + "ethpm-types>=0.6.10", # lower pin only, `eth-ape` governs upper pin "eth-pydantic-types", # Use same version as eth-ape "pydantic_settings", # Use same version as eth-ape "taskiq[metrics]>=0.10.4,<0.11.0", diff --git a/silverback/application.py b/silverback/application.py index b04eea34..1a07e6f0 100644 --- a/silverback/application.py +++ b/silverback/application.py @@ -118,10 +118,18 @@ def broker_task_decorator( # Register user function as task handler with our broker def add_taskiq_task(handler: Callable) -> AsyncTaskiqDecoratedTask: + labels = {"task_type": str(task_type)} + + if container and isinstance(container, ContractEvent): + # Address is almost a certainty if the container is being used as a filter here. + if contract_address := getattr(container.contract, "address", None): + labels["contract_address"] = contract_address + labels["event_signature"] = container.abi.signature + broker_task = self.broker.register_task( handler, task_name=handler.__name__, - task_type=str(task_type), + **labels, ) self.tasks[task_type].append(TaskData(container=container, handler=broker_task)) diff --git a/silverback/middlewares.py b/silverback/middlewares.py index 18c6c72f..b4673902 100644 --- a/silverback/middlewares.py +++ b/silverback/middlewares.py @@ -56,9 +56,11 @@ def _create_label(self, message: TaskiqMessage) -> str: return message.task_name def pre_execute(self, message: TaskiqMessage) -> TaskiqMessage: - if not (task_type := message.labels.pop("task_type")): + if "task_type" not in message.labels: return message # Not a silverback task + task_type = message.labels.pop("task_type") + try: task_type = TaskType(task_type) except ValueError: