From 24de0d4e70a68c6af1c8b8f56bbace9dc1facfd0 Mon Sep 17 00:00:00 2001 From: Nicholas Devenish Date: Fri, 8 May 2026 13:22:25 +0100 Subject: [PATCH 1/2] Return connection parameters from Pika/Stomp plugin activation This means that the parameters are available on the configuration object, rather than having to go via the expected transport every time. --- src/workflows/util/zocalo/configuration.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/workflows/util/zocalo/configuration.py b/src/workflows/util/zocalo/configuration.py index 359fe37..43feca9 100644 --- a/src/workflows/util/zocalo/configuration.py +++ b/src/workflows/util/zocalo/configuration.py @@ -48,6 +48,7 @@ def activate(configuration): ("prefix", "--stomp-prfx"), ]: StompTransport.defaults[target] = configuration[cfgoption] + return dict(StompTransport.defaults) class Pika: @@ -70,6 +71,7 @@ def activate(configuration): ("vhost", "--rabbit-vhost"), ]: PikaTransport.defaults[target] = configuration[cfgoption] + return dict(PikaTransport.defaults) class DefaultTransport: From ccdb8cd23bf905164eac0ccf660cf0c434781cce Mon Sep 17 00:00:00 2001 From: Nicholas Devenish Date: Fri, 8 May 2026 13:29:52 +0100 Subject: [PATCH 2/2] Tidy up OTEL plugin typing Explicitly annotate, and return a copy of the configuration instead of a mutable reference. --- src/workflows/util/zocalo/configuration.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/workflows/util/zocalo/configuration.py b/src/workflows/util/zocalo/configuration.py index 43feca9..33585c1 100644 --- a/src/workflows/util/zocalo/configuration.py +++ b/src/workflows/util/zocalo/configuration.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import ClassVar, TypedDict + from marshmallow import fields from zocalo.configuration import PluginSchema @@ -11,21 +13,25 @@ class OTEL: """A Zocalo configuration plugin to pre-populate OTELTracing config defaults""" + class _OTELConfig(TypedDict, total=False): + endpoint: str + timeout: int + + # Store configuration for access by services + config: ClassVar[_OTELConfig] = {} + class Schema(PluginSchema): host = fields.Str(required=True) port = fields.Int(required=True) timeout = fields.Int(required=False, load_default=10) - # Store configuration for access by services - config = {} - @staticmethod def activate(configuration): # Build the full endpoint URL endpoint = f"https://{configuration['host']}:{configuration['port']}/v1/traces" OTEL.config["endpoint"] = endpoint OTEL.config["timeout"] = configuration.get("timeout", 10) - return OTEL.config + return dict(OTEL.config) class Stomp: