@@ -92,6 +92,9 @@ def __init__(self, config: CloudEventsConfig) -> None:
9292 super ().__init__ (config )
9393 self .config : CloudEventsConfig = config
9494 self ._client : httpx .AsyncClient | None = None
95+ # Cache for K_CE_OVERRIDES to avoid repeated JSON parsing
96+ self ._cached_k_ce_overrides : str | None = None
97+ self ._cached_ce_extensions : dict [str , str ] = {}
9598
9699 async def start (self ) -> None :
97100 """Start the HTTP client."""
@@ -197,22 +200,42 @@ async def send_event(self, event: NotificationEvent) -> bool:
197200 )
198201 return False
199202
203+ def _get_cached_ce_extensions (self ) -> dict [str , str ]:
204+ """Get cached CloudEvents extensions from K_CE_OVERRIDES.
205+
206+ Parsing only happens if the environment variable has changed.
207+ """
208+ current_overrides = os .getenv ("K_CE_OVERRIDES" )
209+
210+ # If the environment variable hasn't changed, return cached result
211+ if current_overrides == self ._cached_k_ce_overrides :
212+ return self ._cached_ce_extensions
213+
214+ # Environment variable changed or first time - re-parse
215+ self ._cached_k_ce_overrides = current_overrides
216+
217+ if current_overrides :
218+ try :
219+ overrides_data = json .loads (current_overrides )
220+ self ._cached_ce_extensions = overrides_data .get ("extensions" , {})
221+ except json .JSONDecodeError :
222+ self .logger .warning (
223+ "Invalid K_CE_OVERRIDES JSON, ignoring: %s" , current_overrides
224+ )
225+ self ._cached_ce_extensions = {}
226+ else :
227+ self ._cached_ce_extensions = {}
228+
229+ return self ._cached_ce_extensions
230+
200231 def _convert_to_cloudevent (self , event : NotificationEvent ) -> CloudEvent :
201232 """Convert NotificationEvent to CloudEvent."""
202233 # Use config values which now include environment overrides
203234 source = self .config .source
204235 event_type_base = self .config .event_type
205236
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- )
237+ # Get cached KNative CE overrides, parsing only if environment variable changed
238+ ce_extensions = self ._get_cached_ce_extensions ()
216239
217240 # Map operation to event type suffix
218241 operation_map = {"INSERT" : "created" , "UPDATE" : "updated" , "DELETE" : "deleted" }
0 commit comments