diff --git a/CHANGES.txt b/CHANGES.txt index fee4327..f77d71b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ CHANGES -1.1.0 (Feb 27 2026) +1.1.0 (Mar 6 2026) - Split SDK 10.5.1 remains supported. Provider lifecycle events (PROVIDER_READY, PROVIDER_CONFIGURATION_CHANGED, PROVIDER_ERROR) require Split SDK 10.6.0 or later; on 10.5.1 the provider works as before without emitting those events. - Provider now emits OpenFeature provider events (PROVIDER_READY, PROVIDER_CONFIGURATION_CHANGED, PROVIDER_ERROR) when Split SDK 10.6+ fires ready/update/timeout. Event details include OpenFeature-friendly metadata (see docs/EVENTS_MAPPING.md). diff --git a/split_openfeature_provider/split_provider.py b/split_openfeature_provider/split_provider.py index f009111..a506b43 100644 --- a/split_openfeature_provider/split_provider.py +++ b/split_openfeature_provider/split_provider.py @@ -71,9 +71,12 @@ def detach(self): self._split_client_wrapper.unregister_for_split_events() super().detach() - def _on_split_event(self, split_event, event_metadata): - """Map Split SDK events to OpenFeature provider events with OpenFeature-friendly details.""" - _LOGGER.debug("SplitProvider: _on_split_event received %s", split_event) + def _handle_split_event(self, split_event, event_metadata): + """ + Handle Split SDK events and emit corresponding OpenFeature provider events. + Shared logic for both sync and async event handlers. + """ + _LOGGER.debug("SplitProvider: received split event %s", split_event) if split_event == SPLIT_EVENT_BUR_TIMEOUT: self.emit_provider_error(ProviderEventDetails( message="Block until ready timed out", @@ -96,30 +99,13 @@ def _on_split_event(self, split_event, event_metadata): _LOGGER.info("SplitProvider: emitting PROVIDER_CONFIGURATION_CHANGED flags_changed=%s", flags_changed) self.emit_provider_configuration_changed(details) + def _on_split_event(self, split_event, event_metadata): + """Map Split SDK events to OpenFeature provider events (sync path).""" + self._handle_split_event(split_event, event_metadata) + async def _on_split_event_async(self, split_event, event_metadata): - """Async version for asyncio path; same logic as _on_split_event (emit_* are sync).""" - _LOGGER.debug("SplitProvider: _on_split_event_async received %s", split_event) - if split_event == SPLIT_EVENT_BUR_TIMEOUT: - self.emit_provider_error(ProviderEventDetails( - message="Block until ready timed out", - error_code=ErrorCode.PROVIDER_NOT_READY, - metadata=_metadata_from_split(split_event, event_metadata), - )) - return - if SdkEvent is None: - return - if split_event == SdkEvent.SDK_READY: - self.emit_provider_ready(ProviderEventDetails( - metadata=_metadata_from_split(split_event, event_metadata), - )) - elif split_event == SdkEvent.SDK_UPDATE: - flags_changed = _flags_changed_from_sdk_update(event_metadata) - details = ProviderEventDetails( - flags_changed=flags_changed, - metadata=_metadata_from_split(split_event, event_metadata), - ) - _LOGGER.info("SplitProvider: emitting PROVIDER_CONFIGURATION_CHANGED flags_changed=%s", flags_changed) - self.emit_provider_configuration_changed(details) + """Map Split SDK events to OpenFeature provider events (async path).""" + self._handle_split_event(split_event, event_metadata) def get_provider_hooks(self) -> typing.List[Hook]: return []