Skip to content

Commit 892cb78

Browse files
committed
feat: Update ChangeSet to always require a Selector
1 parent 9774633 commit 892cb78

File tree

7 files changed

+16
-18
lines changed

7 files changed

+16
-18
lines changed

ldclient/impl/datasourcev2/polling.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def _poll(self, ss: SelectorStore) -> BasisResult:
221221

222222
basis = Basis(
223223
change_set=change_set,
224-
persist=change_set.selector is not None and change_set.selector.is_defined(),
224+
persist=change_set.selector.is_defined(),
225225
environment_id=env_id,
226226
)
227227

ldclient/impl/datasystem/fdv2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ def _run_initializers(self, set_on_ready: Event):
414414
self._store.apply(basis.change_set, basis.persist)
415415

416416
# Set ready event if an only if a selector is defined for the changeset
417-
if basis.change_set.selector is not None and basis.change_set.selector.is_defined():
417+
if basis.change_set.selector.is_defined():
418418
set_on_ready.set()
419419
return
420420
except Exception as e:

ldclient/impl/datasystem/store.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def apply(self, change_set: ChangeSet, persist: bool) -> None:
268268
log.error("Store: couldn't apply changeset: %s", str(e))
269269

270270
def _set_basis(
271-
self, collections: Collections, selector: Optional[Selector], persist: bool
271+
self, collections: Collections, selector: Selector, persist: bool
272272
) -> None:
273273
"""
274274
Set the basis of the store. Any existing data is discarded.
@@ -310,7 +310,7 @@ def _set_basis(
310310
self._send_change_events(affected_items)
311311

312312
def _apply_delta(
313-
self, collections: Collections, selector: Optional[Selector], persist: bool
313+
self, collections: Collections, selector: Selector, persist: bool
314314
) -> None:
315315
"""
316316
Apply a delta update to the store.

ldclient/interfaces.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1346,7 +1346,7 @@ class ChangeSet:
13461346

13471347
intent_code: IntentCode
13481348
changes: List[Change]
1349-
selector: Optional[Selector]
1349+
selector: Selector
13501350

13511351

13521352
@dataclass(frozen=True)

ldclient/testing/impl/datasourcev2/test_polling_payload_parsing.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ def test_transfer_none():
4646
change_set = result.value
4747
assert change_set.intent_code == IntentCode.TRANSFER_NONE
4848
assert len(change_set.changes) == 0
49-
assert change_set.selector is not None
5049
assert not change_set.selector.is_defined()
5150

5251

@@ -59,7 +58,7 @@ def test_transfer_full_with_empty_payload():
5958
change_set = result.value
6059
assert change_set.intent_code == IntentCode.TRANSFER_FULL
6160
assert len(change_set.changes) == 0
62-
assert change_set.selector is not None
61+
assert change_set.selector.is_defined()
6362
assert change_set.selector.state == "(p:5A46PZ79FQ9D08YYKT79DECDNV:461)"
6463
assert change_set.selector.version == 461
6564

@@ -87,7 +86,7 @@ def test_processes_put_object():
8786
assert change_set.changes[0].version == 461
8887
assert isinstance(change_set.changes[0].object, dict)
8988

90-
assert change_set.selector is not None
89+
assert change_set.selector.is_defined()
9190
assert change_set.selector.state == "(p:5A46PZ79FQ9D08YYKT79DECDNV:461)"
9291
assert change_set.selector.version == 461
9392

@@ -107,7 +106,7 @@ def test_processes_delete_object():
107106
assert change_set.changes[0].version == 461
108107
assert change_set.changes[0].object is None
109108

110-
assert change_set.selector is not None
109+
assert change_set.selector.is_defined()
111110
assert change_set.selector.state == "(p:5A46PZ79FQ9D08YYKT79DECDNV:461)"
112111
assert change_set.selector.version == 461
113112

@@ -169,7 +168,6 @@ def test_fdv1_payload_empty_flags_and_segments():
169168
assert change_set.intent_code == IntentCode.TRANSFER_FULL
170169
assert len(change_set.changes) == 0
171170
# FDv1 doesn't use selectors
172-
assert change_set.selector is not None
173171
assert not change_set.selector.is_defined()
174172

175173

ldclient/testing/impl/datasourcev2/test_polling_synchronizer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def test_handles_empty_changeset():
142142

143143
assert valid.change_set is not None
144144
assert len(valid.change_set.changes) == 0
145-
assert valid.change_set.selector is not None
145+
assert valid.change_set.selector.is_defined()
146146
assert valid.change_set.selector.version == 300
147147
assert valid.change_set.selector.state == "p:SOMETHING:300"
148148
assert valid.change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -175,7 +175,7 @@ def test_handles_put_objects():
175175
assert valid.change_set.changes[0].key == "flag-key"
176176
assert valid.change_set.changes[0].object == {"key": "flag-key"}
177177
assert valid.change_set.changes[0].version == 100
178-
assert valid.change_set.selector is not None
178+
assert valid.change_set.selector.is_defined()
179179
assert valid.change_set.selector.version == 300
180180
assert valid.change_set.selector.state == "p:SOMETHING:300"
181181
assert valid.change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -205,7 +205,7 @@ def test_handles_delete_objects():
205205
assert valid.change_set.changes[0].kind == ObjectKind.FLAG
206206
assert valid.change_set.changes[0].key == "flag-key"
207207
assert valid.change_set.changes[0].version == 101
208-
assert valid.change_set.selector is not None
208+
assert valid.change_set.selector.is_defined()
209209
assert valid.change_set.selector.version == 300
210210
assert valid.change_set.selector.state == "p:SOMETHING:300"
211211
assert valid.change_set.intent_code == IntentCode.TRANSFER_FULL

ldclient/testing/impl/datasourcev2/test_streaming_synchronizer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ def test_handles_empty_changeset(events): # pylint: disable=redefined-outer-nam
209209

210210
assert updates[0].change_set is not None
211211
assert len(updates[0].change_set.changes) == 0
212-
assert updates[0].change_set.selector is not None
212+
assert updates[0].change_set.selector.is_defined()
213213
assert updates[0].change_set.selector.version == 300
214214
assert updates[0].change_set.selector.state == "p:SOMETHING:300"
215215
assert updates[0].change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -241,7 +241,7 @@ def test_handles_put_objects(events): # pylint: disable=redefined-outer-name
241241
assert updates[0].change_set.changes[0].key == "flag-key"
242242
assert updates[0].change_set.changes[0].object == {"key": "flag-key"}
243243
assert updates[0].change_set.changes[0].version == 100
244-
assert updates[0].change_set.selector is not None
244+
assert updates[0].change_set.selector.is_defined()
245245
assert updates[0].change_set.selector.version == 300
246246
assert updates[0].change_set.selector.state == "p:SOMETHING:300"
247247
assert updates[0].change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -272,7 +272,7 @@ def test_handles_delete_objects(events): # pylint: disable=redefined-outer-name
272272
assert updates[0].change_set.changes[0].kind == ObjectKind.FLAG
273273
assert updates[0].change_set.changes[0].key == "flag-key"
274274
assert updates[0].change_set.changes[0].version == 101
275-
assert updates[0].change_set.selector is not None
275+
assert updates[0].change_set.selector.is_defined()
276276
assert updates[0].change_set.selector.version == 300
277277
assert updates[0].change_set.selector.state == "p:SOMETHING:300"
278278
assert updates[0].change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -299,7 +299,7 @@ def test_swallows_goodbye(events): # pylint: disable=redefined-outer-name
299299

300300
assert updates[0].change_set is not None
301301
assert len(updates[0].change_set.changes) == 0
302-
assert updates[0].change_set.selector is not None
302+
assert updates[0].change_set.selector.is_defined()
303303
assert updates[0].change_set.selector.version == 300
304304
assert updates[0].change_set.selector.state == "p:SOMETHING:300"
305305
assert updates[0].change_set.intent_code == IntentCode.TRANSFER_FULL
@@ -326,7 +326,7 @@ def test_swallows_heartbeat(events): # pylint: disable=redefined-outer-name
326326

327327
assert updates[0].change_set is not None
328328
assert len(updates[0].change_set.changes) == 0
329-
assert updates[0].change_set.selector is not None
329+
assert updates[0].change_set.selector.is_defined()
330330
assert updates[0].change_set.selector.version == 300
331331
assert updates[0].change_set.selector.state == "p:SOMETHING:300"
332332
assert updates[0].change_set.intent_code == IntentCode.TRANSFER_FULL

0 commit comments

Comments
 (0)