36 Commits

Author SHA1 Message Date
Antoine Pitrou
f939b3c0f7 Issue #28427: old keys should not remove new values from
WeakValueDictionary when collecting from another thread.
2016-12-27 15:08:27 +01:00
Antoine Pitrou
805f283aa3 Issue #19542: Fix bugs in WeakValueDictionary.setdefault() and WeakValueDictionary.pop()
when a GC collection happens in another thread.

Original patch and report by Armin Rigo.
2016-12-19 11:12:58 +01:00
Serhiy Storchaka
f522bbc9c2 Issue #22958: Constructor and update method of weakref.WeakValueDictionary
now accept the self keyword argument.
2015-09-29 23:51:27 +03:00
Kristján Valur Jónsson
222b284911 Issue #7105: weak dict iterators are fragile because of unpredictable GC runs
Backport the fix from pyton 3.x for this issue.
2013-12-05 10:03:45 +00:00
Michael Foord
e6410c536c Backport of weakref.WeakSet and tests from Python 3. 2010-03-29 20:04:23 +00:00
Antoine Pitrou
775fd66d7b Issue #2116: Weak references and weak dictionaries now support copy()ing and deepcopy()ing. 2009-05-15 16:54:52 +00:00
Brett Cannon
88f801d409 Update __all__ for cookielib, csv, os, and urllib2 for objects imported into
the module but exposed as part of the API.
2008-08-18 00:46:22 +00:00
Alexandre Vassalotti
ba08f072d2 Fixed URL of PEP 205 in weakref's module docstring. 2008-04-27 00:52:24 +00:00
Fred Drake
017e68c413 SF #1479988: add methods to allow access to weakrefs for the
weakref.WeakKeyDictionary and weakref.WeakValueDictionary
2006-05-02 06:53:59 +00:00
Georg Brandl
9166e1a24a Bug #1196315: fix weakref.WeakValueDictionary constructor. 2005-06-04 09:20:03 +00:00
Andrew M. Kuchling
33ad28b68d Use multi-line import 2004-08-31 11:38:12 +00:00
Raymond Hettinger
6114679099 SF bug #1012315: weakref.WeakValueDictionary should override .has_key()
* Check the found object for a None value during a contains/has_key
  lookup.  Perhaps it will help the OP who is likely suffering from an
  occassional GC or threading object deletion after self.data is checked.

* Complete the previous patch by removing the unnecessary indirection
  for weak dict iterators.  Makes the code cleaner and more readable.
2004-08-19 21:32:06 +00:00
Raymond Hettinger
cc0def1868 Convert weak iterators to generator form. 2004-08-13 07:12:45 +00:00
Fred Drake
0a4dd390bf Make weak references subclassable:
- weakref.ref and weakref.ReferenceType will become aliases for each
  other

- weakref.ref will be a modern, new-style class with proper __new__
  and __init__ methods

- weakref.WeakValueDictionary will have a lighter memory footprint,
  using a new weakref.ref subclass to associate the key with the
  value, allowing us to have only a single object of overhead for each
  dictionary entry (currently, there are 3 objects of overhead per
  entry: a weakref to the value, a weakref to the dictionary, and a
  function object used as a weakref callback; the weakref to the
  dictionary could be avoided without this change)

- a new macro, PyWeakref_CheckRefExact(), will be added

- PyWeakref_CheckRef() will check for subclasses of weakref.ref

This closes SF patch #983019.
2004-07-02 18:57:45 +00:00
Walter Dörwald
80ce6dd564 The default argument in dict.setdefault() defaults to None.
Add this default to weakref.WeakValueDictionary.setdefault()
and weakref.WeakKeyDictionary.setdefault() too.
2004-05-27 18:16:25 +00:00
Raymond Hettinger
31017aed36 SF #904720: dict.update should take a 2-tuple sequence like dict.__init_
(Championed by Bob Ippolito.)

The update() method for mappings now accepts all the same argument forms
as the dict() constructor.  This includes item lists and/or keyword
arguments.
2004-03-04 08:25:44 +00:00
Tim Peters
886128f4f8 SF 742860: WeakKeyDictionary __delitem__ uses iterkeys
Someone review this, please!  Final releases are getting close, Fred
(the weakref guy) won't be around until Tuesday, and the pre-patch
code can indeed raise spurious RuntimeErrors in the presence of
threads or mutating comparison functions.

See the bug report for my confusions:  I can't see any reason for why
__delitem__ iterated over the keys.  The new one-liner implementation
is much faster, can't raise RuntimeError, and should be better-behaved
in all respects wrt threads.

New tests test_weak_keyed_bad_delitem and
test_weak_keyed_cascading_deletes fail before this patch.

Bugfix candidate for 2.2.3 too, if someone else agrees with this patch.
2003-05-25 01:45:11 +00:00
Raymond Hettinger
2c2d322884 SF patch #667730: More DictMixin
* Adds missing pop() methods to weakref.py
* Expands test suite to broaden coverage of objects with
  a mapping interface.

Contributed by Sebastien Keim.
2003-03-09 07:05:43 +00:00
Tim Peters
c411dbaeee Whitespace normalization. 2002-07-16 21:35:23 +00:00
Guido van Rossum
009afb7c90 SF patch 564549 (Erik Andersén).
The WeakKeyDictionary constructor didn't work when a dict arg was
given.  Fixed by moving a line.  Also adding a unit test.

Bugfix candidate.
2002-06-10 20:00:52 +00:00
Raymond Hettinger
54f0222547 SF 563203. Replaced 'has_key()' with 'in'. 2002-06-01 14:18:47 +00:00
Fred Drake
3bae7ddf8e WeakKeyDictionary.has_key(): If the key being tested is not weakly
referencable (weakref.ref() raises TypeError), return 0 instead of
propogating the TypeError.
This closes SF bug #478536; bugfix candidate.
2001-11-06 16:36:53 +00:00
Fred Drake
e029242d5c ReferenceError is now built-in, so pick it up from the right place.
It still needs to be here to preserve the API.
2001-10-05 21:54:09 +00:00
Fred Drake
746fe0fae5 Clean up circular references in the Weak*Dictionary classes; this avoids
depending on the cycle detector code in the library implementation.
This is a *slightly* different patch than SF patch #417795, but takes
the same approach.  (This version avoids calling the __len__() method of
the dict in the remove() functions.)
This closes SF patch #417795.
2001-09-28 19:01:26 +00:00
Fred Drake
b663a2ccbd Add __delitem__() support for WeakKeyDictionary.
This closes SF bug #458860.
2001-09-06 14:51:01 +00:00