Skip to content

Commit 08732c1

Browse files
committed
Don't look up K_CE_OVERRIDES in every call.
1 parent 572de12 commit 08732c1

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

eoapi_notifier/outputs/cloudevents.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,26 @@ def __init__(self, config: CloudEventsConfig) -> None:
9292
super().__init__(config)
9393
self.config: CloudEventsConfig = config
9494
self._client: httpx.AsyncClient | None = None
95+
# Parse K_CE_OVERRIDES once during initialization
96+
self._ce_extensions = self._parse_k_ce_overrides()
97+
98+
def _parse_k_ce_overrides(self) -> dict[str, str]:
99+
"""Parse K_CE_OVERRIDES environment variable once during initialization."""
100+
k_ce_overrides = os.getenv("K_CE_OVERRIDES")
101+
if not k_ce_overrides:
102+
return {}
103+
104+
try:
105+
overrides_data = json.loads(k_ce_overrides)
106+
extensions = overrides_data.get("extensions", {})
107+
if isinstance(extensions, dict):
108+
return {str(k): str(v) for k, v in extensions.items()}
109+
return {}
110+
except json.JSONDecodeError:
111+
self.logger.warning(
112+
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", k_ce_overrides
113+
)
114+
return {}
95115

96116
async def start(self) -> None:
97117
"""Start the HTTP client."""
@@ -203,16 +223,8 @@ def _convert_to_cloudevent(self, event: NotificationEvent) -> CloudEvent:
203223
source = self.config.source
204224
event_type_base = self.config.event_type
205225

206-
# Apply KNative CE overrides if present
207-
ce_extensions = {}
208-
if k_ce_overrides := os.getenv("K_CE_OVERRIDES"):
209-
try:
210-
overrides_data = json.loads(k_ce_overrides)
211-
ce_extensions = overrides_data.get("extensions", {})
212-
except json.JSONDecodeError:
213-
self.logger.warning(
214-
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", k_ce_overrides
215-
)
226+
# Use pre-parsed KNative CE overrides
227+
ce_extensions = self._ce_extensions
216228

217229
# Map operation to event type suffix
218230
operation_map = {"INSERT": "created", "UPDATE": "updated", "DELETE": "deleted"}

tests/test_cloudevents_output.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,11 @@ async def test_health_check(self, adapter: CloudEventsAdapter) -> None:
262262
},
263263
)
264264
def test_convert_to_cloudevent_with_overrides(
265-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
265+
self, config: CloudEventsConfig, sample_event: NotificationEvent
266266
) -> None:
267267
"""Test CloudEvent conversion with K_CE_OVERRIDES."""
268+
# Create adapter after environment variable is set
269+
adapter = CloudEventsAdapter(config)
268270
cloud_event = adapter._convert_to_cloudevent(sample_event)
269271

270272
assert isinstance(cloud_event, CloudEvent)
@@ -273,18 +275,22 @@ def test_convert_to_cloudevent_with_overrides(
273275

274276
@patch.dict(os.environ, {"K_CE_OVERRIDES": '{"extensions": {"number": 123}}'})
275277
def test_convert_to_cloudevent_with_number_override(
276-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
278+
self, config: CloudEventsConfig, sample_event: NotificationEvent
277279
) -> None:
278280
"""Test CloudEvent conversion with number in K_CE_OVERRIDES."""
281+
# Create adapter after environment variable is set
282+
adapter = CloudEventsAdapter(config)
279283
cloud_event = adapter._convert_to_cloudevent(sample_event)
280284

281285
assert cloud_event["number"] == "123" # Should be converted to string
282286

283287
@patch.dict(os.environ, {"K_CE_OVERRIDES": "invalid-json"})
284288
def test_convert_to_cloudevent_invalid_overrides(
285-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
289+
self, config: CloudEventsConfig, sample_event: NotificationEvent
286290
) -> None:
287291
"""Test CloudEvent conversion with invalid K_CE_OVERRIDES JSON."""
292+
# Create adapter after environment variable is set
293+
adapter = CloudEventsAdapter(config)
288294
cloud_event = adapter._convert_to_cloudevent(sample_event)
289295

290296
# Should work normally without overrides
@@ -293,9 +299,11 @@ def test_convert_to_cloudevent_invalid_overrides(
293299

294300
@patch.dict(os.environ, {"K_CE_OVERRIDES": '{"other": "field"}'})
295301
def test_convert_to_cloudevent_no_extensions(
296-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
302+
self, config: CloudEventsConfig, sample_event: NotificationEvent
297303
) -> None:
298304
"""Test CloudEvent conversion with K_CE_OVERRIDES but no extensions field."""
305+
# Create adapter after environment variable is set
306+
adapter = CloudEventsAdapter(config)
299307
cloud_event = adapter._convert_to_cloudevent(sample_event)
300308

301309
# Should work normally without extensions

0 commit comments

Comments
 (0)