summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2023-03-08 20:19:20 +0000
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2023-05-03 14:09:17 +0100
commit34a78b6c451f2b05ae217d94b13eedecaf055e5f (patch)
tree7c35fe1d5b4f6a0e508a94dbc07e9a4478b94e6c
parent67652aa0e1b6c0811985bbfe93ec46e25ab1deeb (diff)
downloadpython-setuptools-git-34a78b6c451f2b05ae217d94b13eedecaf055e5f.tar.gz
Record normalized requirements in dist.metadata object
-rw-r--r--setuptools/dist.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 2af25895..812b7e7a 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -277,8 +277,11 @@ class Distribution(_Distribution):
'provides_extras': ordered_set.OrderedSet,
'license_file': lambda: None,
'license_files': lambda: None,
- 'install_requires': list,
- 'extras_require': dict,
+ # Both install_requires and extras_require are needed to write PKG-INFO,
+ # So we take this opportunity to cache parsed requirement objects.
+ # These attributes are not part of the public API and intended for internal use.
+ '_normalized_install_requires': dict, # Dict[str, Requirement]
+ '_normalized_extras_require': dict, # Dict[str, Dict[str, Requirement]]
}
_patched_dist = None
@@ -401,8 +404,6 @@ class Distribution(_Distribution):
self.metadata.python_requires = self.python_requires
self._normalize_requires()
- self.metadata.install_requires = self.install_requires
- self.metadata.extras_require = self.extras_require
if self.extras_require:
for extra in self.extras_require.keys():
@@ -415,9 +416,17 @@ class Distribution(_Distribution):
"""Make sure requirement-related attributes exist and are normalized"""
install_requires = getattr(self, "install_requires", None) or []
extras_require = getattr(self, "extras_require", None) or {}
- self.install_requires = list(map(str, _reqs.parse(install_requires)))
+ meta = self.metadata
+ meta._normalized_install_requires = {
+ str(r): r for r in _reqs.parse(install_requires)
+ }
+ meta._normalized_extras_require = {
+ k: {str(r): r for r in _reqs.parse(v or [])}
+ for k, v in extras_require.items()
+ }
+ self.install_requires = list(meta._normalized_install_requires)
self.extras_require = {
- k: list(map(str, _reqs.parse(v or []))) for k, v in extras_require.items()
+ k: list(v) for k, v in meta._normalized_extras_require.items()
}
def _finalize_license_files(self):