Skip to content

Commit 2fc66e5

Browse files
committed
Update distinct list tests.
1 parent 595b945 commit 2fc66e5

4 files changed

Lines changed: 1883 additions & 359 deletions

File tree

gel/_internal/_qbmodel/_abstract/_link_set.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class AbstractLinkSet( # noqa: PLW1641 (__hash__ is implemented)
6262
"_tracking_set",
6363
)
6464

65+
_allowed_write_only_ops: ClassVar[list[str]] = []
66+
6567
# Set of (hashable) items to maintain distinctness.
6668
_tracking_set: dict[_MT_co, _MT_co] | None
6769
# Mapping of `self._pyid(item)` to `item`
@@ -616,6 +618,22 @@ def _ensure_snapshot(self) -> None:
616618
assert self._tracking_index is not None
617619
self._index_snapshot = dict(self._tracking_index)
618620

621+
def _ensure_snapshot_then_track(self, value: _MT_co) -> None: # type: ignore [misc]
622+
self._ensure_snapshot()
623+
if self._is_tracked(value):
624+
return
625+
self._track_item(value)
626+
self._items.append(value)
627+
628+
def _ensure_snapshot_then_untrack(self, value: _MT_co) -> _MT_co | None: # type: ignore [misc]
629+
self._ensure_snapshot()
630+
if not self._is_tracked(value):
631+
return None
632+
633+
self._untrack_item(value)
634+
self._items.remove(value)
635+
return value
636+
619637
def __gel_get_added__(self) -> list[_MT_co]:
620638
match bool(self._index_snapshot), bool(self._tracking_index):
621639
case True, False:
@@ -752,7 +770,7 @@ def add(self, value: _MT_co) -> None: # type: ignore [misc]
752770
self.__gel_add__(value)
753771

754772
def discard(self, value: _MT_co) -> None: # type: ignore [misc]
755-
"""Remove item; raise ValueError if missing."""
773+
"""Remove item; do nothing if missing."""
756774
self.__gel_remove__(value)
757775

758776
def remove(self, value: _MT_co) -> None: # type: ignore [misc]
@@ -854,22 +872,12 @@ class LinkSet(
854872

855873
def __gel_add__(self, value: _MT_co) -> None: # type: ignore [misc]
856874
value = self._check_value(value)
857-
self._ensure_snapshot()
858-
if self._is_tracked(value):
859-
return
860-
self._track_item(value)
861-
self._items.append(value)
875+
self._ensure_snapshot_then_track(value)
862876

863877
def __gel_remove__(self, value: _MT_co) -> _MT_co | None: # type: ignore [misc]
864-
"""Remove item; raise ValueError if missing."""
878+
"""Remove item; return None if missing."""
865879
value = self._check_value(value)
866-
self._ensure_snapshot()
867-
if not self._is_tracked(value):
868-
return None
869-
870-
self._untrack_item(value)
871-
self._items.remove(value)
872-
return value
880+
return self._ensure_snapshot_then_untrack(value)
873881

874882
def _check_value(self, value: Any) -> _MT_co:
875883
cls = type(self)
@@ -997,7 +1005,7 @@ def __gel_add__(self, value: _PT_co | _BMT_co) -> None:
9971005
self._items.append(proxy)
9981006

9991007
def __gel_remove__(self, value: _PT_co | _BMT_co) -> _PT_co | None:
1000-
"""Remove item; raise ValueError if missing."""
1008+
"""Remove item; return None if missing."""
10011009

10021010
self._ensure_snapshot()
10031011

0 commit comments

Comments
 (0)