Skip to content

Commit b2664c9

Browse files
committed
Upgrade setuptools to 69.1.1
1 parent 448af4d commit b2664c9

File tree

4 files changed

+59
-82
lines changed

4 files changed

+59
-82
lines changed

news/setuptools.vendor.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Upgrade setuptools to 69.1.1

src/pip/_vendor/pkg_resources/__init__.py

Lines changed: 54 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,16 @@
1818
"""
1919

2020
import sys
21+
22+
if sys.version_info < (3, 8):
23+
raise RuntimeError("Python 3.8 or later is required")
24+
2125
import os
2226
import io
2327
import time
2428
import re
2529
import types
30+
from typing import Protocol
2631
import zipfile
2732
import zipimport
2833
import warnings
@@ -41,18 +46,10 @@
4146
import ntpath
4247
import posixpath
4348
import importlib
49+
import importlib.machinery
4450
from pkgutil import get_importer
4551

46-
try:
47-
import _imp
48-
except ImportError:
49-
# Python 3.2 compatibility
50-
import imp as _imp
51-
52-
try:
53-
FileExistsError
54-
except NameError:
55-
FileExistsError = OSError
52+
import _imp
5653

5754
# capture these to bypass sandboxing
5855
from os import utime
@@ -68,14 +65,6 @@
6865
from os import open as os_open
6966
from os.path import isdir, split
7067

71-
try:
72-
import importlib.machinery as importlib_machinery
73-
74-
# access attribute to force import under delayed import mechanisms.
75-
importlib_machinery.__name__
76-
except ImportError:
77-
importlib_machinery = None
78-
7968
from pip._internal.utils._jaraco_text import (
8069
yield_lines,
8170
drop_comment,
@@ -91,9 +80,6 @@
9180
__import__('pip._vendor.packaging.markers')
9281
__import__('pip._vendor.packaging.utils')
9382

94-
if sys.version_info < (3, 5):
95-
raise RuntimeError("Python 3.5 or later is required")
96-
9783
# declare some globals that will be defined later to
9884
# satisfy the linters.
9985
require = None
@@ -119,7 +105,7 @@
119105
"pkg_resources is deprecated as an API. "
120106
"See https://setuptools.pypa.io/en/latest/pkg_resources.html",
121107
DeprecationWarning,
122-
stacklevel=2
108+
stacklevel=2,
123109
)
124110

125111

@@ -407,20 +393,18 @@ def get_provider(moduleOrReq):
407393
return _find_adapter(_provider_factories, loader)(module)
408394

409395

410-
def _macos_vers(_cache=[]):
411-
if not _cache:
412-
version = platform.mac_ver()[0]
413-
# fallback for MacPorts
414-
if version == '':
415-
plist = '/System/Library/CoreServices/SystemVersion.plist'
416-
if os.path.exists(plist):
417-
if hasattr(plistlib, 'readPlist'):
418-
plist_content = plistlib.readPlist(plist)
419-
if 'ProductVersion' in plist_content:
420-
version = plist_content['ProductVersion']
421-
422-
_cache.append(version.split('.'))
423-
return _cache[0]
396+
@functools.lru_cache(maxsize=None)
397+
def _macos_vers():
398+
version = platform.mac_ver()[0]
399+
# fallback for MacPorts
400+
if version == '':
401+
plist = '/System/Library/CoreServices/SystemVersion.plist'
402+
if os.path.exists(plist):
403+
with open(plist, 'rb') as fh:
404+
plist_content = plistlib.load(fh)
405+
if 'ProductVersion' in plist_content:
406+
version = plist_content['ProductVersion']
407+
return version.split('.')
424408

425409

426410
def _macos_arch(machine):
@@ -546,54 +530,54 @@ def get_entry_info(dist, group, name):
546530
return get_distribution(dist).get_entry_info(group, name)
547531

548532

549-
class IMetadataProvider:
550-
def has_metadata(name):
533+
class IMetadataProvider(Protocol):
534+
def has_metadata(self, name):
551535
"""Does the package's distribution contain the named metadata?"""
552536

553-
def get_metadata(name):
537+
def get_metadata(self, name):
554538
"""The named metadata resource as a string"""
555539

556-
def get_metadata_lines(name):
540+
def get_metadata_lines(self, name):
557541
"""Yield named metadata resource as list of non-blank non-comment lines
558542
559543
Leading and trailing whitespace is stripped from each line, and lines
560544
with ``#`` as the first non-blank character are omitted."""
561545

562-
def metadata_isdir(name):
546+
def metadata_isdir(self, name):
563547
"""Is the named metadata a directory? (like ``os.path.isdir()``)"""
564548

565-
def metadata_listdir(name):
549+
def metadata_listdir(self, name):
566550
"""List of metadata names in the directory (like ``os.listdir()``)"""
567551

568-
def run_script(script_name, namespace):
552+
def run_script(self, script_name, namespace):
569553
"""Execute the named script in the supplied namespace dictionary"""
570554

571555

572-
class IResourceProvider(IMetadataProvider):
556+
class IResourceProvider(IMetadataProvider, Protocol):
573557
"""An object that provides access to package resources"""
574558

575-
def get_resource_filename(manager, resource_name):
559+
def get_resource_filename(self, manager, resource_name):
576560
"""Return a true filesystem path for `resource_name`
577561
578562
`manager` must be an ``IResourceManager``"""
579563

580-
def get_resource_stream(manager, resource_name):
564+
def get_resource_stream(self, manager, resource_name):
581565
"""Return a readable file-like object for `resource_name`
582566
583567
`manager` must be an ``IResourceManager``"""
584568

585-
def get_resource_string(manager, resource_name):
569+
def get_resource_string(self, manager, resource_name):
586570
"""Return a string containing the contents of `resource_name`
587571
588572
`manager` must be an ``IResourceManager``"""
589573

590-
def has_resource(resource_name):
574+
def has_resource(self, resource_name):
591575
"""Does the package contain the named resource?"""
592576

593-
def resource_isdir(resource_name):
577+
def resource_isdir(self, resource_name):
594578
"""Is the named resource a directory? (like ``os.path.isdir()``)"""
595579

596-
def resource_listdir(resource_name):
580+
def resource_listdir(self, resource_name):
597581
"""List of resource names in the directory (like ``os.listdir()``)"""
598582

599583

@@ -1143,8 +1127,7 @@ def obtain(self, requirement, installer=None):
11431127
None is returned instead. This method is a hook that allows subclasses
11441128
to attempt other ways of obtaining a distribution before falling back
11451129
to the `installer` argument."""
1146-
if installer is not None:
1147-
return installer(requirement)
1130+
return installer(requirement) if installer else None
11481131

11491132
def __iter__(self):
11501133
"""Yield the unique project names of the available distributions"""
@@ -1418,7 +1401,7 @@ def _forgiving_version(version):
14181401
match = _PEP440_FALLBACK.search(version)
14191402
if match:
14201403
safe = match["safe"]
1421-
rest = version[len(safe):]
1404+
rest = version[len(safe) :]
14221405
else:
14231406
safe = "0"
14241407
rest = version
@@ -1734,7 +1717,7 @@ def _register(cls):
17341717
'SourcelessFileLoader',
17351718
)
17361719
for name in loader_names:
1737-
loader_cls = getattr(importlib_machinery, name, type(None))
1720+
loader_cls = getattr(importlib.machinery, name, type(None))
17381721
register_loader_type(loader_cls, cls)
17391722

17401723

@@ -1874,7 +1857,7 @@ def _extract_resource(self, manager, zip_path): # noqa: C901
18741857
timestamp, size = self._get_date_and_size(self.zipinfo[zip_path])
18751858

18761859
if not WRITE_SUPPORT:
1877-
raise IOError(
1860+
raise OSError(
18781861
'"os.rename" and "os.unlink" are not supported ' 'on this platform'
18791862
)
18801863
try:
@@ -1895,7 +1878,7 @@ def _extract_resource(self, manager, zip_path): # noqa: C901
18951878
try:
18961879
rename(tmpnam, real_path)
18971880

1898-
except os.error:
1881+
except OSError:
18991882
if os.path.isfile(real_path):
19001883
if self._is_current(real_path, zip_path):
19011884
# the file became current since it was checked above,
@@ -1908,7 +1891,7 @@ def _extract_resource(self, manager, zip_path): # noqa: C901
19081891
return real_path
19091892
raise
19101893

1911-
except os.error:
1894+
except OSError:
19121895
# report a user-friendly error
19131896
manager.extraction_error()
19141897

@@ -2001,7 +1984,7 @@ def get_metadata(self, name):
20011984
if name != 'PKG-INFO':
20021985
raise KeyError("No metadata except PKG-INFO is available")
20031986

2004-
with io.open(self.path, encoding='utf-8', errors="replace") as f:
1987+
with open(self.path, encoding='utf-8', errors="replace") as f:
20051988
metadata = f.read()
20061989
self._warn_on_replacement(metadata)
20071990
return metadata
@@ -2095,8 +2078,7 @@ def find_eggs_in_zip(importer, path_item, only=False):
20952078
if _is_egg_path(subitem):
20962079
subpath = os.path.join(path_item, subitem)
20972080
dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath)
2098-
for dist in dists:
2099-
yield dist
2081+
yield from dists
21002082
elif subitem.lower().endswith(('.dist-info', '.egg-info')):
21012083
subpath = os.path.join(path_item, subitem)
21022084
submeta = EggMetadata(zipimport.zipimporter(subpath))
@@ -2131,8 +2113,7 @@ def find_on_path(importer, path_item, only=False):
21312113
for entry in sorted(entries):
21322114
fullpath = os.path.join(path_item, entry)
21332115
factory = dist_factory(path_item, entry, only)
2134-
for dist in factory(fullpath):
2135-
yield dist
2116+
yield from factory(fullpath)
21362117

21372118

21382119
def dist_factory(path_item, entry, only):
@@ -2231,7 +2212,7 @@ def resolve_egg_link(path):
22312212
if hasattr(pkgutil, 'ImpImporter'):
22322213
register_finder(pkgutil.ImpImporter, find_on_path)
22332214

2234-
register_finder(importlib_machinery.FileFinder, find_on_path)
2215+
register_finder(importlib.machinery.FileFinder, find_on_path)
22352216

22362217
_declare_state('dict', _namespace_handlers={})
22372218
_declare_state('dict', _namespace_packages={})
@@ -2398,7 +2379,7 @@ def file_ns_handler(importer, path_item, packageName, module):
23982379
register_namespace_handler(pkgutil.ImpImporter, file_ns_handler)
23992380

24002381
register_namespace_handler(zipimport.zipimporter, file_ns_handler)
2401-
register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler)
2382+
register_namespace_handler(importlib.machinery.FileFinder, file_ns_handler)
24022383

24032384

24042385
def null_ns_handler(importer, path_item, packageName, module):
@@ -2424,12 +2405,9 @@ def _cygwin_patch(filename): # pragma: nocover
24242405
return os.path.abspath(filename) if sys.platform == 'cygwin' else filename
24252406

24262407

2427-
def _normalize_cached(filename, _cache={}):
2428-
try:
2429-
return _cache[filename]
2430-
except KeyError:
2431-
_cache[filename] = result = normalize_path(filename)
2432-
return result
2408+
@functools.lru_cache(maxsize=None)
2409+
def _normalize_cached(filename):
2410+
return normalize_path(filename)
24332411

24342412

24352413
def _is_egg_path(path):
@@ -2850,14 +2828,11 @@ def _get_metadata_path_for_display(self, name):
28502828

28512829
def _get_metadata(self, name):
28522830
if self.has_metadata(name):
2853-
for line in self.get_metadata_lines(name):
2854-
yield line
2831+
yield from self.get_metadata_lines(name)
28552832

28562833
def _get_version(self):
28572834
lines = self._get_metadata(self.PKG_INFO)
2858-
version = _version_from_file(lines)
2859-
2860-
return version
2835+
return _version_from_file(lines)
28612836

28622837
def activate(self, path=None, replace=False):
28632838
"""Ensure distribution is importable on `path` (default=sys.path)"""
@@ -2904,7 +2879,7 @@ def __getattr__(self, attr):
29042879

29052880
def __dir__(self):
29062881
return list(
2907-
set(super(Distribution, self).__dir__())
2882+
set(super().__dir__())
29082883
| set(attr for attr in self._provider.__dir__() if not attr.startswith('_'))
29092884
)
29102885

@@ -3171,7 +3146,7 @@ class RequirementParseError(packaging.requirements.InvalidRequirement):
31713146
class Requirement(packaging.requirements.Requirement):
31723147
def __init__(self, requirement_string):
31733148
"""DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!"""
3174-
super(Requirement, self).__init__(requirement_string)
3149+
super().__init__(requirement_string)
31753150
self.unsafe_name = self.name
31763151
project_name = safe_name(self.name)
31773152
self.project_name, self.key = project_name, project_name.lower()
@@ -3232,6 +3207,7 @@ def _find_adapter(registry, ob):
32323207
for t in types:
32333208
if t in registry:
32343209
return registry[t]
3210+
return None
32353211

32363212

32373213
def ensure_directory(path):
@@ -3243,7 +3219,7 @@ def ensure_directory(path):
32433219
def _bypass_ensure_directory(path):
32443220
"""Sandbox-bypassing version of ensure_directory()"""
32453221
if not WRITE_SUPPORT:
3246-
raise IOError('"os.mkdir" not supported on this platform.')
3222+
raise OSError('"os.mkdir" not supported on this platform.')
32473223
dirname, filename = split(path)
32483224
if dirname and filename and not isdir(dirname):
32493225
_bypass_ensure_directory(dirname)

src/pip/_vendor/vendor.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ rich==13.7.0
1616
pygments==2.17.2
1717
typing_extensions==4.7.1
1818
resolvelib==1.0.1
19-
setuptools==68.0.0
19+
setuptools==69.1.1
2020
six==1.16.0
2121
tenacity==8.2.2
2222
tomli==2.0.1

tools/vendoring/patches/pkg_resources.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ diff --git a/src/pip/_vendor/pkg_resources/__init__.py b/src/pip/_vendor/pkg_res
22
index 3f2476a0c..8d5727d35 100644
33
--- a/src/pip/_vendor/pkg_resources/__init__.py
44
+++ b/src/pip/_vendor/pkg_resources/__init__.py
5-
@@ -71,7 +71,7 @@
6-
except ImportError:
7-
importlib_machinery = None
5+
@@ -65,7 +65,7 @@
6+
from os import open as os_open
7+
from os.path import isdir, split
88

99
-from pkg_resources.extern.jaraco.text import (
1010
+from pip._internal.utils._jaraco_text import (

0 commit comments

Comments
 (0)