[bumpversion]
-current_version = 60.8.1
+current_version = 60.8.2
commit = True
tag = True
+v60.8.2
+-------
+
+
+Misc
+^^^^
+* #3091: Make ``concurrent.futures`` import lazy in vendored ``more_itertools``
+ package to a avoid importing threading as a side effect (which caused
+ `gevent/gevent#1865 <https://github.com/gevent/gevent/issues/1865>`__).
+ -- by :user:`maciejp-ro`
+
+
v60.8.1
-------
from collections import Counter, defaultdict, deque, abc
from collections.abc import Sequence
-from concurrent.futures import ThreadPoolExecutor
from functools import partial, reduce, wraps
from heapq import merge, heapify, heapreplace, heappop
from itertools import (
self._aborted = False
self._future = None
self._wait_seconds = wait_seconds
- self._executor = ThreadPoolExecutor(max_workers=1)
+ self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
self._iterator = self._reader()
def __enter__(self):
[metadata]
name = setuptools
-version = 60.8.1
+version = 60.8.2
author = Python Packaging Authority
author_email = distutils-sig@python.org
description = Easily download, build, install, upgrade, and uninstall Python packages
from collections import Counter, defaultdict, deque, abc
from collections.abc import Sequence
-from concurrent.futures import ThreadPoolExecutor
from functools import partial, reduce, wraps
from heapq import merge, heapify, heapreplace, heappop
from itertools import (
self._aborted = False
self._future = None
self._wait_seconds = wait_seconds
- self._executor = ThreadPoolExecutor(max_workers=1)
+ self._executor = __import__("concurrent.futures").futures.ThreadPoolExecutor(max_workers=1)
self._iterator = self._reader()
def __enter__(self):
file.write_text(text)
+def rewrite_more_itertools(pkg_files: Path):
+ """
+ Defer import of concurrent.futures. Workaround for #3090.
+ """
+ more_file = pkg_files.joinpath('more.py')
+ text = more_file.read_text()
+ text = re.sub(r'^.*concurrent.futures.*?\n', '', text, flags=re.MULTILINE)
+ text = re.sub(
+ 'ThreadPoolExecutor',
+ '__import__("concurrent.futures").futures.ThreadPoolExecutor',
+ text,
+ )
+ more_file.write_text(text)
+
+
def clean(vendor):
"""
Remove all files out of the vendor directory except the meta
rewrite_jaraco_text(vendor / 'jaraco/text', 'pkg_resources.extern')
rewrite_jaraco(vendor / 'jaraco', 'pkg_resources.extern')
rewrite_importlib_resources(vendor / 'importlib_resources', 'pkg_resources.extern')
+ rewrite_more_itertools(vendor / "more_itertools")
def update_setuptools():
rewrite_jaraco_text(vendor / 'jaraco/text', 'setuptools.extern')
rewrite_jaraco(vendor / 'jaraco', 'setuptools.extern')
rewrite_importlib_resources(vendor / 'importlib_resources', 'setuptools.extern')
+ rewrite_more_itertools(vendor / "more_itertools")
__name__ == '__main__' and update_vendored()