MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / WeakSequence

Class WeakSequence

lib/sqlalchemy/util/_collections.py:290–316  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

288
289
290class WeakSequence(Sequence[_T]):
291 def __init__(self, __elements: Sequence[_T] = ()):
292 # adapted from weakref.WeakKeyDictionary, prevent reference
293 # cycles in the collection itself
294 def _remove(item, selfref=weakref.ref(self)):
295 self = selfref()
296 if self is not None:
297 self._storage.remove(item)
298
299 self._remove = _remove
300 self._storage = [
301 weakref.ref(element, _remove) for element in __elements
302 ]
303
304 def append(self, item):
305 self._storage.append(weakref.ref(item, self._remove))
306
307 def __len__(self):
308 return len(self._storage)
309
310 def __iter__(self):
311 return (
312 obj for obj in (ref() for ref in self._storage) if obj is not None
313 )
314
315 def __getitem__(self, index):
316 return self._storage[index]()
317
318
319class OrderedIdentitySet(IdentitySet):

Callers 3

test_index_errorMethod · 0.90

Calls

no outgoing calls

Tested by 3

test_index_errorMethod · 0.72