[Python-checkins] (no subject)

Batuhan Taşkaya webhook-mailer at python.org
Fri Apr 10 10:46:44 EDT 2020




To: python-checkins at python.org
Subject: bpo-39481: PEP 585 for a variety of modules (GH-19423)
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0

https://github.com/python/cpython/commit/0361556537686f857f1025ead75e6af4ca7c=
c94a
commit: 0361556537686f857f1025ead75e6af4ca7cc94a
branch: master
author: Batuhan Ta=C5=9Fkaya <batuhanosmantaskaya at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-04-10T07:46:36-07:00
summary:

bpo-39481: PEP 585 for a variety of modules (GH-19423)

- concurrent.futures
- ctypes
- http.cookies
- multiprocessing
- queue
- tempfile
- unittest.case
- urllib.parse

files:
M Lib/concurrent/futures/_base.py
M Lib/concurrent/futures/thread.py
M Lib/ctypes/__init__.py
M Lib/http/cookies.py
M Lib/multiprocessing/managers.py
M Lib/multiprocessing/pool.py
M Lib/multiprocessing/queues.py
M Lib/multiprocessing/shared_memory.py
M Lib/queue.py
M Lib/tempfile.py
M Lib/test/test_genericalias.py
M Lib/unittest/case.py
M Lib/urllib/parse.py
M Modules/_ctypes/_ctypes.c
M Modules/_queuemodule.c

diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py
index fd0acec55d046..bf546f8ae1d1c 100644
--- a/Lib/concurrent/futures/_base.py
+++ b/Lib/concurrent/futures/_base.py
@@ -7,6 +7,7 @@
 import logging
 import threading
 import time
+import types
=20
 FIRST_COMPLETED =3D 'FIRST_COMPLETED'
 FIRST_EXCEPTION =3D 'FIRST_EXCEPTION'
@@ -544,6 +545,8 @@ def set_exception(self, exception):
             self._condition.notify_all()
         self._invoke_callbacks()
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
 class Executor(object):
     """This is an abstract base class for concrete asynchronous executors."""
=20
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread=
.py
index 2aa4e17d47fa7..2810b357bc1e1 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -10,6 +10,7 @@
 import itertools
 import queue
 import threading
+import types
 import weakref
 import os
=20
@@ -57,6 +58,8 @@ def run(self):
         else:
             self.future.set_result(result)
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 def _worker(executor_reference, work_queue, initializer, initargs):
     if initializer is not None:
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 8f0991147d72f..4afa4ebd42249 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -1,6 +1,7 @@
 """create and manipulate C data types in Python"""
=20
 import os as _os, sys as _sys
+import types as _types
=20
 __version__ =3D "1.1.0"
=20
@@ -450,6 +451,8 @@ def __getitem__(self, name):
     def LoadLibrary(self, name):
         return self._dlltype(name)
=20
+    __class_getitem__ =3D classmethod(_types.GenericAlias)
+
 cdll =3D LibraryLoader(CDLL)
 pydll =3D LibraryLoader(PyDLL)
=20
diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py
index 6694f5478bdad..35ac2dc6ae280 100644
--- a/Lib/http/cookies.py
+++ b/Lib/http/cookies.py
@@ -131,6 +131,7 @@
 #
 import re
 import string
+import types
=20
 __all__ =3D ["CookieError", "BaseCookie", "SimpleCookie"]
=20
@@ -419,6 +420,8 @@ def OutputString(self, attrs=3DNone):
         # Return the result
         return _semispacejoin(result)
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 #
 # Pattern for finding cookie
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index 1668220c09957..9d490a1d8b352 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -21,6 +21,7 @@
 import array
 import queue
 import time
+import types
 import os
 from os import getpid
=20
@@ -1129,6 +1130,8 @@ def set(self, value):
         return self._callmethod('set', (value,))
     value =3D property(get, set)
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 BaseListProxy =3D MakeProxyType('BaseListProxy', (
     '__add__', '__contains__', '__delitem__', '__getitem__', '__len__',
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 41dd923d4f974..b8a0b827635f0 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -20,6 +20,7 @@
 import threading
 import time
 import traceback
+import types
 import warnings
 from queue import Empty
=20
@@ -780,6 +781,8 @@ def _set(self, i, obj):
         del self._cache[self._job]
         self._pool =3D None
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
 AsyncResult =3D ApplyResult       # create alias -- see #17805
=20
 #
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index d112db2cd981d..835070118387e 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -14,6 +14,7 @@
 import threading
 import collections
 import time
+import types
 import weakref
 import errno
=20
@@ -366,3 +367,5 @@ def put(self, obj):
         else:
             with self._wlock:
                 self._writer.send_bytes(obj)
+
+    __class_getitem__ =3D classmethod(types.GenericAlias)
diff --git a/Lib/multiprocessing/shared_memory.py b/Lib/multiprocessing/share=
d_memory.py
index 184e36704baae..9f954d9c38feb 100644
--- a/Lib/multiprocessing/shared_memory.py
+++ b/Lib/multiprocessing/shared_memory.py
@@ -14,6 +14,7 @@
 import errno
 import struct
 import secrets
+import types
=20
 if os.name =3D=3D "nt":
     import _winapi
@@ -508,3 +509,5 @@ def index(self, value):
                 return position
         else:
             raise ValueError(f"{value!r} not in this container")
+
+    __class_getitem__ =3D classmethod(types.GenericAlias)
diff --git a/Lib/queue.py b/Lib/queue.py
index 5bb0431e94946..10dbcbc18ece8 100644
--- a/Lib/queue.py
+++ b/Lib/queue.py
@@ -1,6 +1,7 @@
 '''A multi-producer, multi-consumer queue.'''
=20
 import threading
+import types
 from collections import deque
 from heapq import heappush, heappop
 from time import monotonic as time
@@ -216,6 +217,8 @@ def _put(self, item):
     def _get(self):
         return self.queue.popleft()
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 class PriorityQueue(Queue):
     '''Variant of Queue that retrieves open entries in priority order (lowes=
t first).
@@ -316,6 +319,8 @@ def qsize(self):
         '''Return the approximate size of the queue (not reliable!).'''
         return len(self._queue)
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 if SimpleQueue is None:
     SimpleQueue =3D _PySimpleQueue
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index a398345f108d0..ed15c0fd1f8af 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -829,3 +829,5 @@ def __exit__(self, exc, value, tb):
     def cleanup(self):
         if self._finalizer.detach():
             self._rmtree(self.name)
+
+    __class_getitem__ =3D classmethod(_types.GenericAlias)
diff --git a/Lib/test/test_genericalias.py b/Lib/test/test_genericalias.py
index 4241eabed0845..a00899f5267d7 100644
--- a/Lib/test/test_genericalias.py
+++ b/Lib/test/test_genericalias.py
@@ -6,16 +6,28 @@
     defaultdict, deque, OrderedDict, Counter, UserDict, UserList
 )
 from collections.abc import *
+from concurrent.futures import Future
+from concurrent.futures.thread import _WorkItem
 from contextlib import AbstractContextManager, AbstractAsyncContextManager
+from ctypes import Array, LibraryLoader
 from difflib import SequenceMatcher
 from filecmp import dircmp
 from fileinput import FileInput
 from mmap import mmap
 from ipaddress import IPv4Network, IPv4Interface, IPv6Network, IPv6Interface
 from itertools import chain
+from http.cookies import Morsel
+from multiprocessing.managers import ValueProxy
+from multiprocessing.pool import ApplyResult
+from multiprocessing.shared_memory import ShareableList
+from multiprocessing.queues import SimpleQueue
 from os import DirEntry
 from re import Pattern, Match
 from types import GenericAlias, MappingProxyType, AsyncGeneratorType
+from tempfile import TemporaryDirectory, SpooledTemporaryFile
+from urllib.parse import SplitResult, ParseResult
+from unittest.case import _AssertRaisesContext
+from queue import Queue, SimpleQueue
 import typing
=20
 from typing import TypeVar
@@ -49,6 +61,15 @@ def test_subscriptable(self):
                   DirEntry,
                   IPv4Network, IPv4Interface, IPv6Network, IPv6Interface,
                   chain,
+                  TemporaryDirectory, SpooledTemporaryFile,
+                  Queue, SimpleQueue,
+                  _AssertRaisesContext,
+                  Array, LibraryLoader,
+                  SplitResult, ParseResult,
+                  ValueProxy, ApplyResult,
+                  ShareableList, SimpleQueue,
+                  Future, _WorkItem,
+                  Morsel,
                   ):
             tname =3D t.__name__
             with self.subTest(f"Testing {tname}"):
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 5e5d535dc6938..d0ee561a3ae93 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -241,6 +241,8 @@ def __exit__(self, exc_type, exc_value, tb):
                      expected_regex.pattern, str(exc_value)))
         return True
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 class _AssertWarnsContext(_AssertRaisesBaseContext):
     """A context manager used to implement TestCase.assertWarns* methods."""
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index 779278bac598a..ea897c3032257 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -29,6 +29,7 @@
=20
 import re
 import sys
+import types
 import collections
 import warnings
=20
@@ -176,6 +177,8 @@ def port(self):
                 raise ValueError("Port out of range 0-65535")
         return port
=20
+    __class_getitem__ =3D classmethod(types.GenericAlias)
+
=20
 class _NetlocResultMixinStr(_NetlocResultMixinBase, _ResultMixinStr):
     __slots__ =3D ()
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index dab39396476ba..ba5ef397cf05b 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -4798,6 +4798,12 @@ Array_length(PyObject *myself)
     return self->b_length;
 }
=20
+static PyMethodDef Array_methods[] =3D {
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
+    { NULL, NULL }
+};
+
 static PySequenceMethods Array_as_sequence =3D {
     Array_length,                               /* sq_length; */
     0,                                          /* sq_concat; */
@@ -4846,7 +4852,7 @@ PyTypeObject PyCArray_Type =3D {
     0,                                          /* tp_weaklistoffset */
     0,                                          /* tp_iter */
     0,                                          /* tp_iternext */
-    0,                                          /* tp_methods */
+    Array_methods,                              /* tp_methods */
     0,                                          /* tp_members */
     0,                                          /* tp_getset */
     0,                                          /* tp_base */
diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c
index 5eef06252cd32..28bf8991285d8 100644
--- a/Modules/_queuemodule.c
+++ b/Modules/_queuemodule.c
@@ -302,6 +302,8 @@ static PyMethodDef simplequeue_methods[] =3D {
     _QUEUE_SIMPLEQUEUE_PUT_METHODDEF
     _QUEUE_SIMPLEQUEUE_PUT_NOWAIT_METHODDEF
     _QUEUE_SIMPLEQUEUE_QSIZE_METHODDEF
+    {"__class_getitem__",    (PyCFunction)Py_GenericAlias,
+    METH_O|METH_CLASS,       PyDoc_STR("See PEP 585")},
     {NULL,           NULL}              /* sentinel */
 };
=20



More information about the Python-checkins mailing list