Skip to content

Commit ebf6eba

Browse files
authored
revert: drop PEP 660 change (#1039)
1 parent d0bb805 commit ebf6eba

3 files changed

Lines changed: 11 additions & 126 deletions

File tree

docs/changelog/1039.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Revert :pr:`1039` from build 1.4.3, no longer check direct_url (for now) - by :user:`henryiii`

src/build/_util.py

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
from collections.abc import Iterator
1010
from collections.abc import Set as AbstractSet
1111

12-
from ._compat.importlib import metadata
13-
1412

1513
_WHEEL_FILENAME_REGEX = re.compile(
1614
r'(?P<distribution>.+)-(?P<version>.+)'
@@ -19,22 +17,6 @@
1917
)
2018

2119

22-
def _url_matches_direct_url(req_url: str, dist: metadata.Distribution) -> bool:
23-
"""Check if the installed distribution's origin (PEP 610) matches the requirement URL."""
24-
import json
25-
26-
if not (raw := dist.read_text('direct_url.json')):
27-
return False
28-
direct_url: dict[str, object] = json.loads(raw)
29-
url = direct_url.get('url', '')
30-
if isinstance(vcs_info := direct_url.get('vcs_info'), dict):
31-
origin = f'{vcs_info.get("vcs", "")}+{url}'
32-
if requested_revision := vcs_info.get('requested_revision'):
33-
origin += f'@{requested_revision}'
34-
return bool(req_url == origin)
35-
return bool(req_url == url)
36-
37-
3820
def check_dependency(
3921
req_string: str, ancestral_req_strings: tuple[str, ...] = (), parent_extras: AbstractSet[str] = frozenset()
4022
) -> Iterator[tuple[str, ...]]:
@@ -73,10 +55,7 @@ def check_dependency(
7355
# dependency is not installed in the environment.
7456
yield (*ancestral_req_strings, normalised_req_string)
7557
else:
76-
if req.url and not _url_matches_direct_url(req.url, dist):
77-
# the installed distribution's origin does not match the URL requirement (PEP 610).
78-
yield (*ancestral_req_strings, normalised_req_string)
79-
elif req.specifier and not req.specifier.contains(dist.version, prereleases=True):
58+
if req.specifier and not req.specifier.contains(dist.version, prereleases=True):
8059
# the installed version is incompatible.
8160
yield (*ancestral_req_strings, normalised_req_string)
8261
elif dist.requires:

tests/test_projectbuilder.py

Lines changed: 9 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,17 @@ def read_text(self, filename: str) -> str:
4343
return self._metadata
4444
return ''
4545

46-
_registry: typing.ClassVar[dict[str, type[MockDistribution]]] = {}
47-
4846
@classmethod
4947
def from_name(cls, name: str) -> MockDistribution:
50-
if (dist_cls := cls._registry.get(name)) is not None:
48+
registry: dict[str, type[MockDistribution]] = {
49+
'extras_dep': ExtraMockDistribution,
50+
'requireless_dep': RequirelessMockDistribution,
51+
'recursive_dep': RecursiveMockDistribution,
52+
'prerelease_dep': PrereleaseMockDistribution,
53+
'circular_dep': CircularMockDistribution,
54+
'nested_circular_dep': NestedCircularMockDistribution,
55+
}
56+
if (dist_cls := registry.get(name)) is not None:
5157
return dist_cls()
5258
raise _importlib.metadata.PackageNotFoundError
5359

@@ -104,18 +110,6 @@ class NestedCircularMockDistribution(MockDistribution):
104110
Requires-Dist: circular_dep""")
105111

106112

107-
MockDistribution._registry.update(
108-
{
109-
'extras_dep': ExtraMockDistribution,
110-
'requireless_dep': RequirelessMockDistribution,
111-
'recursive_dep': RecursiveMockDistribution,
112-
'prerelease_dep': PrereleaseMockDistribution,
113-
'circular_dep': CircularMockDistribution,
114-
'nested_circular_dep': NestedCircularMockDistribution,
115-
}
116-
)
117-
118-
119113
@pytest.mark.parametrize(
120114
('requirement_string', 'expected'),
121115
[
@@ -154,95 +148,6 @@ def test_check_dependency(monkeypatch: pytest.MonkeyPatch, requirement_string: s
154148
assert next(build.check_dependency(requirement_string), None) == expected
155149

156150

157-
class _DirectUrlMixin(MockDistribution):
158-
_direct_url_json: str = ''
159-
160-
def read_text(self, filename: str) -> str:
161-
if filename == 'direct_url.json':
162-
return self._direct_url_json
163-
return super().read_text(filename)
164-
165-
166-
class DirectUrlMockDistribution(_DirectUrlMixin):
167-
_metadata = textwrap.dedent("""\
168-
Metadata-Version: 2.2
169-
Name: direct_url_dep
170-
Version: 1.0.0""")
171-
_direct_url_json = '{"url": "https://example.com/direct_url_dep-1.0.0.tar.gz", "archive_info": {}}'
172-
173-
174-
class VcsDirectUrlMockDistribution(_DirectUrlMixin):
175-
_metadata = textwrap.dedent("""\
176-
Metadata-Version: 2.2
177-
Name: vcs_dep
178-
Version: 1.0.0""")
179-
_direct_url_json = (
180-
'{"url": "https://github.com/example/vcs_dep.git",'
181-
' "vcs_info": {"vcs": "git", "requested_revision": "v1.0.0",'
182-
' "commit_id": "abc123"}}'
183-
)
184-
185-
186-
class VcsNoRevisionMockDistribution(_DirectUrlMixin):
187-
_metadata = textwrap.dedent("""\
188-
Metadata-Version: 2.2
189-
Name: vcs_dep
190-
Version: 1.0.0""")
191-
_direct_url_json = '{"url": "https://github.com/example/vcs_dep.git", "vcs_info": {"vcs": "git", "commit_id": "abc123"}}'
192-
193-
194-
MockDistribution._registry.update(
195-
{
196-
'direct_url_dep': DirectUrlMockDistribution,
197-
'vcs_dep': VcsDirectUrlMockDistribution,
198-
}
199-
)
200-
201-
202-
@pytest.mark.parametrize(
203-
'requirement_string',
204-
[
205-
'extras_dep @ https://example.com/extras_dep-1.0.0.tar.gz',
206-
'missing_dep @ https://example.com/missing_dep-1.0.0.tar.gz',
207-
],
208-
)
209-
def test_check_dependency_url_no_direct_url_is_unmet(monkeypatch: pytest.MonkeyPatch, requirement_string: str) -> None:
210-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
211-
assert next(build.check_dependency(requirement_string), None) is not None
212-
213-
214-
def test_check_dependency_url_matching_direct_url_is_met(monkeypatch: pytest.MonkeyPatch) -> None:
215-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
216-
assert next(build.check_dependency('direct_url_dep @ https://example.com/direct_url_dep-1.0.0.tar.gz'), None) is None
217-
218-
219-
def test_check_dependency_url_mismatched_direct_url_is_unmet(monkeypatch: pytest.MonkeyPatch) -> None:
220-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
221-
assert next(build.check_dependency('direct_url_dep @ https://example.com/other-1.0.0.tar.gz'), None) is not None
222-
223-
224-
def test_check_dependency_vcs_url_matching_direct_url_is_met(monkeypatch: pytest.MonkeyPatch) -> None:
225-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
226-
assert next(build.check_dependency('vcs_dep @ git+https://github.com/example/vcs_dep.git@v1.0.0'), None) is None
227-
228-
229-
def test_check_dependency_vcs_url_mismatched_direct_url_is_unmet(monkeypatch: pytest.MonkeyPatch) -> None:
230-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
231-
assert next(build.check_dependency('vcs_dep @ git+https://github.com/example/vcs_dep.git@v2.0.0'), None) is not None
232-
233-
234-
def test_check_dependency_vcs_url_no_revision_is_met(monkeypatch: pytest.MonkeyPatch) -> None:
235-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
236-
monkeypatch.setitem(MockDistribution._registry, 'vcs_dep', VcsNoRevisionMockDistribution)
237-
assert next(build.check_dependency('vcs_dep @ git+https://github.com/example/vcs_dep.git'), None) is None
238-
239-
240-
def test_check_dependency_vcs_url_no_revision_mismatch_is_unmet(monkeypatch: pytest.MonkeyPatch) -> None:
241-
monkeypatch.setattr(_importlib.metadata, 'Distribution', MockDistribution)
242-
monkeypatch.setitem(MockDistribution._registry, 'vcs_dep', VcsNoRevisionMockDistribution)
243-
assert next(build.check_dependency('vcs_dep @ git+https://github.com/other/repo.git'), None) is not None
244-
245-
246151
def test_bad_project(package_test_no_project: str) -> None:
247152
# Passing a nonexistent project directory
248153
with pytest.raises(build.BuildException):

0 commit comments

Comments
 (0)