diff options
author | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-03-08 20:19:20 +0000 |
---|---|---|
committer | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-05-03 14:09:17 +0100 |
commit | 34a78b6c451f2b05ae217d94b13eedecaf055e5f (patch) | |
tree | 7c35fe1d5b4f6a0e508a94dbc07e9a4478b94e6c | |
parent | 67652aa0e1b6c0811985bbfe93ec46e25ab1deeb (diff) | |
download | python-setuptools-git-34a78b6c451f2b05ae217d94b13eedecaf055e5f.tar.gz |
Record normalized requirements in dist.metadata object
-rw-r--r-- | setuptools/dist.py | 21 |
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): |