Skip to content

Commit 6b2601e

Browse files
authored
feat(vendors): update pyproject-metadata to 0.8.0rc1 (#228)
* feat(vendors): update pyproject-metadata to 0.8.0rc1 Signed-off-by: Frost Ming <me@frostming.com> * test for correct PKG-INFO when author name contains comma
1 parent 885bc8d commit 6b2601e

File tree

6 files changed

+255
-206
lines changed

6 files changed

+255
-206
lines changed
Lines changed: 57 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,106 @@
11
diff --git a/src/pdm/backend/_vendor/pyproject_metadata/__init__.py b/src/pdm/backend/_vendor/pyproject_metadata/__init__.py
2-
index d792d06..0f6544b 100644
2+
index 796fa1e..e59e2d5 100644
33
--- a/src/pdm/backend/_vendor/pyproject_metadata/__init__.py
44
+++ b/src/pdm/backend/_vendor/pyproject_metadata/__init__.py
5-
@@ -13,10 +13,10 @@ import typing
6-
from collections.abc import Mapping
7-
from typing import Any
5+
@@ -16,13 +16,13 @@ if typing.TYPE_CHECKING:
6+
from collections.abc import Mapping
7+
from typing import Any
8+
9+
- from packaging.requirements import Requirement
10+
+ from pdm.backend._vendor.packaging.requirements import Requirement
811

912
-import packaging.markers
1013
-import packaging.requirements
1114
-import packaging.specifiers
15+
-import packaging.utils
1216
-import packaging.version
1317
+import pdm.backend._vendor.packaging.markers as pkg_markers
1418
+import pdm.backend._vendor.packaging.requirements as pkg_requirements
1519
+import pdm.backend._vendor.packaging.specifiers as pkg_specifiers
20+
+import pdm.backend._vendor.packaging.utils as pkg_utils
1621
+import pdm.backend._vendor.packaging.version as pkg_version
1722

1823

19-
__version__ = '0.7.1'
20-
@@ -176,13 +176,13 @@ class Readme(typing.NamedTuple):
24+
__version__ = '0.8.0rc1'
25+
@@ -169,11 +169,11 @@ class Readme(typing.NamedTuple):
2126
@dataclasses.dataclass
22-
class StandardMetadata():
27+
class StandardMetadata:
2328
name: str
2429
- version: packaging.version.Version | None = None
2530
+ version: pkg_version.Version | None = None
2631
description: str | None = None
2732
license: License | None = None
2833
readme: Readme | None = None
2934
- requires_python: packaging.specifiers.SpecifierSet | None = None
30-
- dependencies: list[packaging.requirements.Requirement] = dataclasses.field(default_factory=list)
31-
- optional_dependencies: dict[str, list[packaging.requirements.Requirement]] = dataclasses.field(default_factory=dict)
3235
+ requires_python: pkg_specifiers.SpecifierSet | None = None
33-
+ dependencies: list[pkg_requirements.Requirement] = dataclasses.field(default_factory=list)
34-
+ optional_dependencies: dict[str, list[pkg_requirements.Requirement]] = dataclasses.field(default_factory=dict)
36+
dependencies: list[Requirement] = dataclasses.field(default_factory=list)
37+
optional_dependencies: dict[str, list[Requirement]] = dataclasses.field(default_factory=dict)
3538
entrypoints: dict[str, dict[str, str]] = dataclasses.field(default_factory=dict)
36-
authors: list[tuple[str, str]] = dataclasses.field(default_factory=list)
37-
maintainers: list[tuple[str, str]] = dataclasses.field(default_factory=list)
38-
@@ -228,11 +228,11 @@ class StandardMetadata():
39+
@@ -196,7 +196,7 @@ class StandardMetadata:
40+
41+
@property
42+
def canonical_name(self) -> str:
43+
- return packaging.utils.canonicalize_name(self.name)
44+
+ return pkg_utils.canonicalize_name(self.name)
45+
46+
@classmethod
47+
def from_pyproject(
48+
@@ -229,7 +229,7 @@ class StandardMetadata:
3949

40-
return cls(
41-
name,
42-
- packaging.version.Version(version_string) if version_string else None,
43-
+ pkg_version.Version(version_string) if version_string else None,
44-
fetcher.get_str('project.description'),
50+
version_string = fetcher.get_str('project.version')
51+
requires_python_string = fetcher.get_str('project.requires-python')
52+
- version = packaging.version.Version(version_string) if version_string else None
53+
+ version = pkg_version.Version(version_string) if version_string else None
54+
55+
if version is None and 'version' not in dynamic:
56+
msg = 'Field "project.version" missing and "version" not specified in "project.dynamic"'
57+
@@ -251,7 +251,7 @@ class StandardMetadata:
58+
description,
4559
cls._get_license(fetcher, project_dir),
4660
cls._get_readme(fetcher, project_dir),
4761
- packaging.specifiers.SpecifierSet(requires_python_string) if requires_python_string else None,
4862
+ pkg_specifiers.SpecifierSet(requires_python_string) if requires_python_string else None,
4963
cls._get_dependencies(fetcher),
5064
cls._get_optional_dependencies(fetcher),
5165
cls._get_entrypoints(fetcher),
52-
@@ -325,14 +325,14 @@ class StandardMetadata():
53-
def _build_extra_req(
54-
self,
55-
extra: str,
56-
- requirement: packaging.requirements.Requirement,
57-
- ) -> packaging.requirements.Requirement:
58-
+ requirement: pkg_requirements.Requirement,
59-
+ ) -> pkg_requirements.Requirement:
60-
if requirement.marker: # append our extra to the marker
61-
- requirement.marker = packaging.markers.Marker(
62-
+ requirement.marker = pkg_markers.Marker(
63-
str(requirement.marker) + f' and extra == "{extra}"'
64-
)
65-
else: # add our extra marker
66+
@@ -353,15 +353,15 @@ class StandardMetadata:
67+
requirement = copy.copy(requirement)
68+
if requirement.marker:
69+
if 'or' in requirement.marker._markers:
70+
- requirement.marker = packaging.markers.Marker(
71+
+ requirement.marker = pkg_markers.Marker(
72+
f'({requirement.marker}) and extra == "{extra}"'
73+
)
74+
else:
75+
- requirement.marker = packaging.markers.Marker(
76+
+ requirement.marker = pkg_markers.Marker(
77+
f'{requirement.marker} and extra == "{extra}"'
78+
)
79+
else:
6680
- requirement.marker = packaging.markers.Marker(f'extra == "{extra}"')
6781
+ requirement.marker = pkg_markers.Marker(f'extra == "{extra}"')
6882
return requirement
6983

7084
@staticmethod
71-
@@ -435,17 +435,17 @@ class StandardMetadata():
72-
return Readme(text, file, content_type)
73-
74-
@staticmethod
75-
- def _get_dependencies(fetcher: DataFetcher) -> list[packaging.requirements.Requirement]:
76-
+ def _get_dependencies(fetcher: DataFetcher) -> list[pkg_requirements.Requirement]:
77-
try:
78-
requirement_strings = fetcher.get_list('project.dependencies')
79-
except KeyError:
80-
return []
81-
82-
- requirements: list[packaging.requirements.Requirement] = []
83-
+ requirements: list[pkg_requirements.Requirement] = []
85+
@@ -457,8 +457,8 @@ class StandardMetadata:
86+
requirements: list[Requirement] = []
8487
for req in requirement_strings:
8588
try:
8689
- requirements.append(packaging.requirements.Requirement(req))
8790
- except packaging.requirements.InvalidRequirement as e:
8891
+ requirements.append(pkg_requirements.Requirement(req))
8992
+ except pkg_requirements.InvalidRequirement as e:
90-
raise ConfigurationError(
91-
'Field `project.dependencies` contains an invalid PEP 508 '
92-
f'requirement string `{req}` (`{str(e)}`)'
93-
@@ -453,13 +453,13 @@ class StandardMetadata():
94-
return requirements
95-
96-
@staticmethod
97-
- def _get_optional_dependencies(fetcher: DataFetcher) -> dict[str, list[packaging.requirements.Requirement]]:
98-
+ def _get_optional_dependencies(fetcher: DataFetcher) -> dict[str, list[pkg_requirements.Requirement]]:
99-
try:
100-
val = fetcher.get('project.optional-dependencies')
101-
except KeyError:
102-
return {}
103-
104-
- requirements_dict: collections.defaultdict[str, list[packaging.requirements.Requirement]] = collections.defaultdict(list)
105-
+ requirements_dict: collections.defaultdict[str, list[pkg_requirements.Requirement]] = collections.defaultdict(list)
106-
if not isinstance(val, dict):
107-
raise ConfigurationError(
108-
'Field `project.optional-dependencies` has an invalid type, expecting a '
109-
@@ -479,8 +479,8 @@ class StandardMetadata():
110-
f'expecting a PEP 508 requirement string (got `{req}`)'
93+
msg = (
94+
'Field "project.dependencies" contains an invalid PEP 508 '
95+
f'requirement string "{req}" ("{e}")'
96+
@@ -497,8 +497,8 @@ class StandardMetadata:
11197
)
98+
raise ConfigurationError(msg)
11299
try:
113100
- requirements_dict[extra].append(packaging.requirements.Requirement(req))
114101
- except packaging.requirements.InvalidRequirement as e:
115102
+ requirements_dict[extra].append(pkg_requirements.Requirement(req))
116103
+ except pkg_requirements.InvalidRequirement as e:
117-
raise ConfigurationError(
118-
f'Field `project.optional-dependencies.{extra}` contains '
119-
f'an invalid PEP 508 requirement string `{req}` (`{str(e)}`)'
104+
msg = (
105+
f'Field "project.optional-dependencies.{extra}" contains '
106+
f'an invalid PEP 508 requirement string "{req}" ("{e}")'

0 commit comments

Comments
 (0)