classification
Title: Constructors of weakref mapping classes don't accept "self" and "dict" keyword arguments
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.4, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: 22609 Superseder:
Assigned To: Nosy List: benjamin.peterson, fdrake, pitrou, python-dev, rhettinger, serhiy.storchaka
Priority: normal Keywords: needs review, patch

Created on 2014-11-27 16:13 by serhiy.storchaka, last changed 2015-09-29 21:00 by serhiy.storchaka. This issue is now closed.

Files
File name Uploaded Description Edit
WeakValueDictionary_pos_only_params.patch serhiy.storchaka, 2014-12-09 09:41 review
Messages (4)
msg231767 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-11-27 16:13
Dict-like types in the weakref module (WeakValueDictionary and WeakKeyDictionary) don't allow to specify key-value pair as keyword arguments if key is "self" or "dict".

>>> import weakref
>>> class A: pass
... 
>>> a = A()
>>> d = weakref.WeakValueDictionary(spam=a)
>>> list(d.items())
[('spam', <__main__.A object at 0xb6f3f88c>)]
>>> weakref.WeakValueDictionary(self=a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() got multiple values for argument 'self'
>>> weakref.WeakValueDictionary(dict=a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython/Lib/weakref.py", line 114, in __init__
    self.update(*args, **kw)
  File "/home/serhiy/py/cpython/Lib/weakref.py", line 261, in update
    dict = type({})(dict)
TypeError: 'A' object is not iterable
>>> d = weakref.WeakValueDictionary()
>>> d.update(spam=a)
>>> list(d.items())
[('spam', <__main__.A object at 0xb6f3f88c>)]
>>> d.update(self=a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: update() got multiple values for argument 'self'
>>> d.update(dict=a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython/Lib/weakref.py", line 261, in update
    dict = type({})(dict)
TypeError: 'A' object is not iterable

Related issue for the collections module is issue22609. I think weakref mapping classes should be fixed in the same manner.
msg232358 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-12-09 09:41
Here is a patch similar to patch from issue22609 which makes WeakValueDictionary constructor and update accept keyword arguments "self" and "dict".
msg238694 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2015-03-20 15:45
lgtm
msg251885 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2015-09-29 20:54
New changeset 8274fc521e69 by Serhiy Storchaka in branch '2.7':
Issue #22958: Constructor and update method of weakref.WeakValueDictionary
https://hg.python.org/cpython/rev/8274fc521e69

New changeset 01c79072d671 by Serhiy Storchaka in branch '3.4':
Issue #22958: Constructor and update method of weakref.WeakValueDictionary
https://hg.python.org/cpython/rev/01c79072d671

New changeset 73b6b88ac28a by Serhiy Storchaka in branch '3.5':
Issue #22958: Constructor and update method of weakref.WeakValueDictionary
https://hg.python.org/cpython/rev/73b6b88ac28a

New changeset 815bb6a2d69e by Serhiy Storchaka in branch 'default':
Issue #22958: Constructor and update method of weakref.WeakValueDictionary
https://hg.python.org/cpython/rev/815bb6a2d69e
History
Date User Action Args
2015-09-29 21:00:08serhiy.storchakasetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2015-09-29 20:54:28python-devsetnosy: + python-dev
messages: + msg251885
2015-05-16 16:11:09serhiy.storchakasetdependencies: + Constructors of some mapping classes don't accept `self` keyword argument
2015-03-20 15:45:45benjamin.petersonsetnosy: + benjamin.peterson
messages: + msg238694
2014-12-09 09:41:08serhiy.storchakasetkeywords: + needs review, patch
files: + WeakValueDictionary_pos_only_params.patch
messages: + msg232358

stage: patch review
2014-11-27 16:13:23serhiy.storchakacreate