Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-103134: Update multiprocessing.managers.ListProxy and multiprocessing.managers.DictProxy #103133

Merged
merged 34 commits into from
May 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
6fb4cba
Add support for manager.list().clear()
invisibleroads Mar 30, 2023
b3c8810
📜🤖 Added by blurb_it.
blurb-it[bot] Mar 30, 2023
fc803ca
Update 2023-03-30-18-19-53.gh-issue-103134.bHrn91.rst
invisibleroads Mar 30, 2023
a748d41
Update ListProxy and DictProxy
invisibleroads Mar 31, 2023
22de5a1
Update Misc/NEWS.d/next/Library/2023-03-30-18-19-53.gh-issue-103134.b…
invisibleroads Mar 31, 2023
8602f0a
Update 2023-03-30-18-19-53.gh-issue-103134.bHrn91.rst
invisibleroads Mar 31, 2023
6fe264a
Add DictProxy.__ior__ for d |= {'b': 2}
invisibleroads Mar 31, 2023
8c2afdb
Update 2023-03-30-18-19-53.gh-issue-103134.bHrn91.rst
invisibleroads Mar 31, 2023
3ae5749
Merge branch 'python:main' into patch-1
invisibleroads Apr 29, 2023
1cf0985
Fix __ior__ and add tests thanks to https://github.com/python/cpython…
invisibleroads Apr 30, 2023
5ef9850
Merge branch 'main' into patch-1
invisibleroads Apr 30, 2023
dd54efc
Merge branch 'main' into patch-1
invisibleroads Apr 30, 2023
8354c5b
Merge branch 'main' into patch-1
invisibleroads Apr 30, 2023
b826c7b
Merge branch 'main' into patch-1
invisibleroads Apr 30, 2023
8550fe6
Merge branch 'main' into patch-1
invisibleroads May 1, 2023
a57c395
Merge branch 'main' into patch-1
invisibleroads May 5, 2023
d3e88af
Merge branch 'main' into patch-1
invisibleroads May 9, 2023
dc298c6
Merge branch 'main' into patch-1
invisibleroads May 12, 2023
e33e7ab
Merge branch 'main' into patch-1
invisibleroads May 19, 2023
9e71823
Merge branch 'main' into patch-1
invisibleroads May 20, 2023
847c072
Merge branch 'main' into patch-1
invisibleroads May 20, 2023
820b45b
Merge branch 'main' into patch-1
invisibleroads May 20, 2023
e94d306
Merge branch 'main' into patch-1
invisibleroads May 20, 2023
083ad3d
Merge branch 'main' into patch-1
invisibleroads Apr 27, 2024
83ecdb3
Test the type and the value of the results as requested by @serhiy-st…
invisibleroads Apr 27, 2024
6f2ea5b
Remove trailing whitespace
invisibleroads Apr 27, 2024
b95f840
Merge branch 'main' into patch-1
invisibleroads Apr 29, 2024
0e94e31
Merge branch 'main' into patch-1
invisibleroads Apr 30, 2024
15089ce
Merge branch 'main' into patch-1
invisibleroads May 3, 2024
d9b3bf6
Merge branch 'main' into patch-1
invisibleroads May 18, 2024
9eb39c9
Merge branch 'main' into patch-1
invisibleroads May 18, 2024
80a2f64
Merge branch 'main' into patch-1
invisibleroads May 20, 2024
577e5a3
Update _test_multiprocessing.py
invisibleroads May 20, 2024
72d1055
Add links to the NEWS blurb
encukou May 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions Lib/multiprocessing/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1152,10 +1152,10 @@ def set(self, value):


BaseListProxy = MakeProxyType('BaseListProxy', (
'__add__', '__contains__', '__delitem__', '__getitem__', '__len__',
'__mul__', '__reversed__', '__rmul__', '__setitem__',
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
'reverse', 'sort', '__imul__'
'__add__', '__contains__', '__delitem__', '__getitem__', '__imul__',
'__len__', '__mul__', '__reversed__', '__rmul__', '__setitem__',
'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop',
'remove', 'reverse', 'sort',
))
class ListProxy(BaseListProxy):
def __iadd__(self, value):
Expand All @@ -1169,16 +1169,20 @@ def __imul__(self, value):


_BaseDictProxy = MakeProxyType('DictProxy', (
'__contains__', '__delitem__', '__getitem__', '__iter__', '__len__',
'__setitem__', 'clear', 'copy', 'get', 'items',
'__contains__', '__delitem__', '__getitem__', '__ior__', '__iter__',
'__len__', '__or__', '__reversed__', '__ror__',
'__setitem__', 'clear', 'copy', 'fromkeys', 'get', 'items',
'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'
))
_BaseDictProxy._method_to_typeid_ = {
'__iter__': 'Iterator',
}
class DictProxy(_BaseDictProxy):
__class_getitem__ = classmethod(types.GenericAlias)
def __ior__(self, value):
self._callmethod('__ior__', (value,))
return self

__class_getitem__ = classmethod(types.GenericAlias)

ArrayProxy = MakeProxyType('ArrayProxy', (
'__len__', '__getitem__', '__setitem__'
Expand Down
46 changes: 43 additions & 3 deletions Lib/test/_test_multiprocessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -6064,12 +6064,30 @@ def _test_list(cls, obj):
case.assertEqual(obj[0], 5)
case.assertEqual(obj.count(5), 1)
case.assertEqual(obj.index(5), 0)
obj += [7]
case.assertIsInstance(obj, multiprocessing.managers.ListProxy)
case.assertListEqual(list(obj), [5, 7])
obj *= 2
case.assertIsInstance(obj, multiprocessing.managers.ListProxy)
case.assertListEqual(list(obj), [5, 7, 5, 7])
double_obj = obj * 2
case.assertIsInstance(double_obj, list)
case.assertListEqual(list(double_obj), [5, 7, 5, 7, 5, 7, 5, 7])
double_obj = 2 * obj
case.assertIsInstance(double_obj, list)
case.assertListEqual(list(double_obj), [5, 7, 5, 7, 5, 7, 5, 7])
copied_obj = obj.copy()
case.assertIsInstance(copied_obj, list)
case.assertListEqual(list(copied_obj), [5, 7, 5, 7])
obj.extend(double_obj + copied_obj)
obj.sort()
obj.reverse()
for x in obj:
pass
case.assertEqual(len(obj), 1)
case.assertEqual(obj.pop(0), 5)
case.assertEqual(len(obj), 16)
case.assertEqual(obj.pop(0), 7)
obj.clear()
case.assertEqual(len(obj), 0)

def test_list(self):
o = self.manager.list()
Expand All @@ -6088,7 +6106,29 @@ def _test_dict(cls, obj):
case.assertListEqual(list(obj.keys()), ['foo'])
case.assertListEqual(list(obj.values()), [5])
case.assertDictEqual(obj.copy(), {'foo': 5})
case.assertTupleEqual(obj.popitem(), ('foo', 5))
obj |= {'bar': 6}
case.assertIsInstance(obj, multiprocessing.managers.DictProxy)
case.assertDictEqual(dict(obj), {'foo': 5, 'bar': 6})
x = reversed(obj)
case.assertIsInstance(x, type(iter([])))
case.assertListEqual(list(x), ['bar', 'foo'])
x = {'bar': 7, 'baz': 7} | obj
case.assertIsInstance(x, dict)
case.assertDictEqual(dict(x), {'foo': 5, 'bar': 6, 'baz': 7})
x = obj | {'bar': 7, 'baz': 7}
case.assertIsInstance(x, dict)
case.assertDictEqual(dict(x), {'foo': 5, 'bar': 7, 'baz': 7})
x = obj.fromkeys(['bar'], 6)
case.assertIsInstance(x, dict)
case.assertDictEqual(x, {'bar': 6})
x = obj.popitem()
case.assertIsInstance(x, tuple)
case.assertTupleEqual(x, ('bar', 6))
obj.setdefault('bar', 0)
obj.update({'bar': 7})
case.assertEqual(obj.pop('bar'), 7)
obj.clear()
case.assertEqual(len(obj), 0)

def test_dict(self):
o = self.manager.dict()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Add additional methods to :ref:`proxy objects <multiprocessing-proxy_objects>`
in the :mod:`!multiprocessing` module:

* :meth:`!clear` and :meth:`!copy` for proxies of :class:`list`
* :meth:`~dict.fromkeys`, ``reversed(d)``, ``d | {}``, ``{} | d``,
``d |= {'b': 2}`` for proxies of :class:`dict`
Loading