@@ -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-
246151def test_bad_project (package_test_no_project : str ) -> None :
247152 # Passing a nonexistent project directory
248153 with pytest .raises (build .BuildException ):
0 commit comments