Skip to content

Commit 9048101

Browse files
committed
fix: retain categories for archived streaming data
1 parent c99db48 commit 9048101

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

‎fbclient/streaming.py‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,16 @@ def _data_to_dict(data: dict) -> Tuple[int, dict]:
5959
flag['_id'] = flag['id']
6060
flag['id'] = flag['key']
6161
flag['cat'] = FEATURE_FLAGS
62-
flags[flag['id']] = {'id': flag['id'], 'timestamp': flag['timestamp'], 'isArchived': True} if flag['isArchived'] else flag
62+
flags[flag['id']] = ({'id': flag['id'], 'timestamp': flag['timestamp'],
63+
'isArchived': True, 'cat': FEATURE_FLAGS}
64+
if flag['isArchived'] else flag)
6365
version = max(version, flag['timestamp'])
6466
for segment in data['segments']:
6567
segment['timestamp'] = from_str_datetime_to_millis(segment['updatedAt'])
6668
segment['cat'] = SEGMENTS
67-
segments[segment['id']] = {'id': segment['id'], 'timestamp': segment['timestamp'], 'isArchived': True} if segment['isArchived'] else segment
69+
segments[segment['id']] = ({'id': segment['id'], 'timestamp': segment['timestamp'],
70+
'isArchived': True, 'cat': SEGMENTS}
71+
if segment['isArchived'] else segment)
6872
version = max(version, segment['timestamp'])
6973
return version, all_data
7074

‎tests/test_runtime_safety.py‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from fbclient.notice_broadcaster import NoticeBroadcater
1414
from fbclient.status import DataUpdateStatusProviderImpl
1515
from fbclient.status_types import State, StateType
16-
from fbclient.streaming import Streaming
16+
from fbclient.streaming import Streaming, _data_to_dict
17+
from fbclient.category import FEATURE_FLAGS, SEGMENTS
1718
import fbclient.streaming as streaming_module
1819
from fbclient.update_processor import NullUpdateProcessor
1920
from fbclient.utils.http_client import build_http_factory
@@ -99,6 +100,26 @@ def close(self, **_kwargs):
99100
streaming.stop()
100101

101102

103+
def test_archived_streaming_data_retains_category_for_broadcast():
104+
_, data = _data_to_dict({
105+
"featureFlags": [{
106+
"id": "archived-flag-id",
107+
"key": "archived-flag",
108+
"updatedAt": "2026-01-01T00:00:00Z",
109+
"variations": [],
110+
"isArchived": True,
111+
}],
112+
"segments": [{
113+
"id": "archived-segment-id",
114+
"updatedAt": "2026-01-01T00:00:00Z",
115+
"isArchived": True,
116+
}],
117+
})
118+
119+
assert data[FEATURE_FLAGS]["archived-flag"]["cat"] == FEATURE_FLAGS
120+
assert data[SEGMENTS]["archived-segment-id"]["cat"] == SEGMENTS
121+
122+
102123
def test_notice_broadcaster_is_safe_during_listener_churn():
103124
broadcaster = NoticeBroadcater()
104125
callback_count = [0]

0 commit comments

Comments
 (0)