Commit c5fbb62
committed
Fix event payload to handle holdout dict variations
CRITICAL FIX: Holdout impression events had empty variation_key and
variation_id in event payloads because event_factory only checked for
Variation entities, not dict variations.
Root Cause:
- event_factory.py lines 125-127 only handled entities.Variation type
- For holdouts, event.variation is a dict (VariationDict), not Variation entity
- isinstance(event.variation, entities.Variation) returned False for holdouts
- variation_id and variation_key stayed as empty strings ('')
- Event payload sent with empty variation_key and variation_id fields
The Fix:
- Added elif clause to handle dict variations
- Extract 'id' and 'key' from dict using .get() method
- Preserves existing behavior for Variation entities
- Now handles both Variation entities and VariationDict formats
Code Changes (event_factory.py lines 125-131):
```python
if isinstance(event.variation, entities.Variation):
variation_id = event.variation.id
variation_key = event.variation.key
elif isinstance(event.variation, dict):
# Handle holdout variations (dict format)
variation_id = event.variation.get('id', '')
variation_key = event.variation.get('key', '')
```
Impact:
- Holdout impression events now include correct variation_key and variation_id
- Event metadata properly populated for holdout decisions
- Fixes fullstack compatibility suite decide_holdouts.feature validation
- Fixes decide_all_api_with_holdouts.feature validation
- All 54 tests passing (35 holdout + 19 event_factory)
- Backward compatible with existing Variation entity handling
Aligned with Swift SDK event payload structure.1 parent 89d00a7 commit c5fbb62
1 file changed
+4
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
128 | 132 | | |
129 | 133 | | |
130 | 134 | | |
| |||
0 commit comments