MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / WeakSequence

Class WeakSequence

lib/sqlalchemy/util/_collections.py:272–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

270
271
272class WeakSequence(Sequence[_T]):
273 def __init__(self, __elements: Sequence[_T] = (), /):
274 # adapted from weakref.WeakKeyDictionary, prevent reference
275 # cycles in the collection itself
276 def _remove(item, selfref=weakref.ref(self)):
277 self = selfref()
278 if self is not None:
279 self._storage.remove(item)
280
281 self._remove = _remove
282 self._storage = [
283 weakref.ref(element, _remove) for element in __elements
284 ]
285
286 def append(self, item):
287 self._storage.append(weakref.ref(item, self._remove))
288
289 def __len__(self):
290 return len(self._storage)
291
292 def __iter__(self):
293 return (
294 obj for obj in (ref() for ref in self._storage) if obj is not None
295 )
296
297 def __getitem__(self, index):
298 return self._storage[index]()
299
300
301OrderedIdentitySet = IdentitySet

Callers 3

test_index_errorMethod · 0.90

Calls

no outgoing calls

Tested by 3

test_index_errorMethod · 0.72