Skip to content

Commit f5ab594

Browse files
committed
Don't look up K_CE_OVERRIDES in every call.
1 parent 0415e41 commit f5ab594

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
@@ -94,6 +94,26 @@ def __init__(self, config: CloudEventsConfig) -> None:
9494
super().__init__(config)
9595
self.config: CloudEventsConfig = config
9696
self._client: httpx.AsyncClient | None = None
97+
# Parse K_CE_OVERRIDES once during initialization
98+
self._ce_extensions = self._parse_k_ce_overrides()
99+
100+
def _parse_k_ce_overrides(self) -> dict[str, str]:
101+
"""Parse K_CE_OVERRIDES environment variable once during initialization."""
102+
k_ce_overrides = os.getenv("K_CE_OVERRIDES")
103+
if not k_ce_overrides:
104+
return {}
105+
106+
try:
107+
overrides_data = json.loads(k_ce_overrides)
108+
extensions = overrides_data.get("extensions", {})
109+
if isinstance(extensions, dict):
110+
return {str(k): str(v) for k, v in extensions.items()}
111+
return {}
112+
except json.JSONDecodeError:
113+
self.logger.warning(
114+
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", k_ce_overrides
115+
)
116+
return {}
97117

98118
async def start(self) -> None:
99119
"""Start the HTTP client."""
@@ -215,16 +235,8 @@ def _convert_to_cloudevent(self, event: NotificationEvent) -> CloudEvent:
215235
source = self.config.source
216236
event_type_base = self.config.event_type
217237

218-
# Apply KNative CE overrides if present
219-
ce_extensions = {}
220-
if k_ce_overrides := os.getenv("K_CE_OVERRIDES"):
221-
try:
222-
overrides_data = json.loads(k_ce_overrides)
223-
ce_extensions = overrides_data.get("extensions", {})
224-
except json.JSONDecodeError:
225-
self.logger.warning(
226-
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", k_ce_overrides
227-
)
238+
# Use pre-parsed KNative CE overrides
239+
ce_extensions = self._ce_extensions
228240

229241
# Map operation to event type suffix
230242
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
@@ -319,9 +319,11 @@ async def test_health_check(self, adapter: CloudEventsAdapter) -> None:
319319
},
320320
)
321321
def test_convert_to_cloudevent_with_overrides(
322-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
322+
self, config: CloudEventsConfig, sample_event: NotificationEvent
323323
) -> None:
324324
"""Test CloudEvent conversion with K_CE_OVERRIDES."""
325+
# Create adapter after environment variable is set
326+
adapter = CloudEventsAdapter(config)
325327
cloud_event = adapter._convert_to_cloudevent(sample_event)
326328

327329
assert isinstance(cloud_event, CloudEvent)
@@ -330,18 +332,22 @@ def test_convert_to_cloudevent_with_overrides(
330332

331333
@patch.dict(os.environ, {"K_CE_OVERRIDES": '{"extensions": {"number": 123}}'})
332334
def test_convert_to_cloudevent_with_number_override(
333-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
335+
self, config: CloudEventsConfig, sample_event: NotificationEvent
334336
) -> None:
335337
"""Test CloudEvent conversion with number in K_CE_OVERRIDES."""
338+
# Create adapter after environment variable is set
339+
adapter = CloudEventsAdapter(config)
336340
cloud_event = adapter._convert_to_cloudevent(sample_event)
337341

338342
assert cloud_event["number"] == "123" # Should be converted to string
339343

340344
@patch.dict(os.environ, {"K_CE_OVERRIDES": "invalid-json"})
341345
def test_convert_to_cloudevent_invalid_overrides(
342-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
346+
self, config: CloudEventsConfig, sample_event: NotificationEvent
343347
) -> None:
344348
"""Test CloudEvent conversion with invalid K_CE_OVERRIDES JSON."""
349+
# Create adapter after environment variable is set
350+
adapter = CloudEventsAdapter(config)
345351
cloud_event = adapter._convert_to_cloudevent(sample_event)
346352

347353
# Should work normally without overrides
@@ -350,9 +356,11 @@ def test_convert_to_cloudevent_invalid_overrides(
350356

351357
@patch.dict(os.environ, {"K_CE_OVERRIDES": '{"other": "field"}'})
352358
def test_convert_to_cloudevent_no_extensions(
353-
self, adapter: CloudEventsAdapter, sample_event: NotificationEvent
359+
self, config: CloudEventsConfig, sample_event: NotificationEvent
354360
) -> None:
355361
"""Test CloudEvent conversion with K_CE_OVERRIDES but no extensions field."""
362+
# Create adapter after environment variable is set
363+
adapter = CloudEventsAdapter(config)
356364
cloud_event = adapter._convert_to_cloudevent(sample_event)
357365

358366
# Should work normally without extensions

0 commit comments

Comments
 (0)