]> granicus.if.org Git - python/commitdiff
Issue #22609: Constructor of collections.UserDict now accepts the self keyword
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 29 Sep 2015 20:38:34 +0000 (23:38 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 29 Sep 2015 20:38:34 +0000 (23:38 +0300)
argument.

1  2 
Lib/collections/__init__.py
Lib/test/test_userdict.py
Misc/NEWS

index 943cbca4a7da77c1e0104dcc972a6bf99e5dcae0,e8312a9088ffdb215b7a4bb43fe30a81f618895d..638a4ca1eb30cd29cef3078d842dcc72f879ac18
@@@ -939,7 -939,22 +939,22 @@@ class ChainMap(MutableMapping)
  class UserDict(MutableMapping):
  
      # Start by filling-out the abstract methods
-     def __init__(self, dict=None, **kwargs):
+     def __init__(*args, **kwargs):
+         if not args:
+             raise TypeError("descriptor '__init__' of 'UserDict' object "
+                             "needs an argument")
+         self, *args = args
+         if len(args) > 1:
+             raise TypeError('expected at most 1 arguments, got %d' % len(args))
+         if args:
+             dict = args[0]
+         elif 'dict' in kwargs:
+             dict = kwargs.pop('dict')
+             import warnings
+             warnings.warn("Passing 'dict' as keyword argument is deprecated",
 -                          PendingDeprecationWarning, stacklevel=2)
++                          DeprecationWarning, stacklevel=2)
+         else:
+             dict = None
          self.data = {}
          if dict is not None:
              self.update(dict)
index c83cc55faa699c7e13bb844acc8fc7588cb4220a,68a582c58e706504f9da0188a002e98ea4537c8f..6f71d2d3b58e76fa984a5b68d206deb0e08a961a
@@@ -29,7 -29,8 +29,8 @@@ class UserDictTest(mapping_tests.TestHa
          self.assertEqual(collections.UserDict(one=1, two=2), d2)
          # item sequence constructor
          self.assertEqual(collections.UserDict([('one',1), ('two',2)]), d2)
-         self.assertEqual(collections.UserDict(dict=[('one',1), ('two',2)]), d2)
 -        with self.assertWarnsRegex(PendingDeprecationWarning, "'dict'"):
++        with self.assertWarnsRegex(DeprecationWarning, "'dict'"):
+             self.assertEqual(collections.UserDict(dict=[('one',1), ('two',2)]), d2)
          # both together
          self.assertEqual(collections.UserDict([('one',1), ('two',2)], two=3, three=5), d3)
  
          self.assertEqual(t.popitem(), ("x", 42))
          self.assertRaises(KeyError, t.popitem)
  
 -        with self.assertWarnsRegex(PendingDeprecationWarning, "'dict'"):
+     def test_init(self):
+         for kw in 'self', 'other', 'iterable':
+             self.assertEqual(list(collections.UserDict(**{kw: 42}).items()),
+                              [(kw, 42)])
+         self.assertEqual(list(collections.UserDict({}, dict=42).items()),
+                          [('dict', 42)])
+         self.assertEqual(list(collections.UserDict({}, dict=None).items()),
+                          [('dict', None)])
++        with self.assertWarnsRegex(DeprecationWarning, "'dict'"):
+             self.assertEqual(list(collections.UserDict(dict={'a': 42}).items()),
+                              [('a', 42)])
+         self.assertRaises(TypeError, collections.UserDict, 42)
+         self.assertRaises(TypeError, collections.UserDict, (), ())
+         self.assertRaises(TypeError, collections.UserDict.__init__)
+     def test_update(self):
+         for kw in 'self', 'dict', 'other', 'iterable':
+             d = collections.UserDict()
+             d.update(**{kw: 42})
+             self.assertEqual(list(d.items()), [(kw, 42)])
+         self.assertRaises(TypeError, collections.UserDict().update, 42)
+         self.assertRaises(TypeError, collections.UserDict().update, {}, {})
+         self.assertRaises(TypeError, collections.UserDict.update)
      def test_missing(self):
          # Make sure UserDict doesn't have a __missing__ method
          self.assertEqual(hasattr(collections.UserDict, "__missing__"), False)
diff --cc Misc/NEWS
Simple merge