| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | import re | 
					
						
							|  |  |  | import textwrap | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  | import warnings | 
					
						
							| 
									
										
										
										
											2021-04-24 10:13:51 -04:00
										 |  |  | import importlib | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  | import contextlib | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-22 21:38:26 -05:00
										 |  |  | from . import fixtures | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | from importlib.metadata import ( | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     Distribution, | 
					
						
							|  |  |  |     PackageNotFoundError, | 
					
						
							|  |  |  |     distribution, | 
					
						
							|  |  |  |     entry_points, | 
					
						
							|  |  |  |     files, | 
					
						
							|  |  |  |     metadata, | 
					
						
							|  |  |  |     requires, | 
					
						
							|  |  |  |     version, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  | @contextlib.contextmanager | 
					
						
							|  |  |  | def suppress_known_deprecation(): | 
					
						
							|  |  |  |     with warnings.catch_warnings(record=True) as ctx: | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         warnings.simplefilter('default', category=DeprecationWarning) | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         yield ctx | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | class APITests( | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     fixtures.EggInfoPkg, | 
					
						
							|  |  |  |     fixtures.DistInfoPkg, | 
					
						
							|  |  |  |     fixtures.DistInfoPkgWithDot, | 
					
						
							|  |  |  |     fixtures.EggInfoFile, | 
					
						
							|  |  |  |     unittest.TestCase, | 
					
						
							|  |  |  | ): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     version_pattern = r'\d+\.\d+(\.\d)?' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_retrieves_version_of_self(self): | 
					
						
							|  |  |  |         pkg_version = version('egginfo-pkg') | 
					
						
							|  |  |  |         assert isinstance(pkg_version, str) | 
					
						
							|  |  |  |         assert re.match(self.version_pattern, pkg_version) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_retrieves_version_of_distinfo_pkg(self): | 
					
						
							|  |  |  |         pkg_version = version('distinfo-pkg') | 
					
						
							|  |  |  |         assert isinstance(pkg_version, str) | 
					
						
							|  |  |  |         assert re.match(self.version_pattern, pkg_version) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_for_name_does_not_exist(self): | 
					
						
							|  |  |  |         with self.assertRaises(PackageNotFoundError): | 
					
						
							|  |  |  |             distribution('does-not-exist') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     def test_name_normalization(self): | 
					
						
							|  |  |  |         names = 'pkg.dot', 'pkg_dot', 'pkg-dot', 'pkg..dot', 'Pkg.Dot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.dot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_prefix_not_matched(self): | 
					
						
							|  |  |  |         prefixes = 'p', 'pkg', 'pkg.' | 
					
						
							|  |  |  |         for prefix in prefixes: | 
					
						
							|  |  |  |             with self.subTest(prefix): | 
					
						
							|  |  |  |                 with self.assertRaises(PackageNotFoundError): | 
					
						
							|  |  |  |                     distribution(prefix) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     def test_for_top_level(self): | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |             distribution('egginfo-pkg').read_text('top_level.txt').strip(), 'mod' | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_read_text(self): | 
					
						
							|  |  |  |         top_level = [ | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |             path for path in files('egginfo-pkg') if path.name == 'top_level.txt' | 
					
						
							|  |  |  |         ][0] | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         self.assertEqual(top_level.read_text(), 'mod\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points(self): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         eps = entry_points() | 
					
						
							|  |  |  |         assert 'entries' in eps.groups | 
					
						
							|  |  |  |         entries = eps.select(group='entries') | 
					
						
							|  |  |  |         assert 'main' in entries.names | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         ep = entries['main'] | 
					
						
							|  |  |  |         self.assertEqual(ep.value, 'mod:main') | 
					
						
							|  |  |  |         self.assertEqual(ep.extras, []) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |     def test_entry_points_distribution(self): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         entries = entry_points(group='entries') | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         for entry in ("main", "ns:sub"): | 
					
						
							|  |  |  |             ep = entries[entry] | 
					
						
							|  |  |  |             self.assertIn(ep.dist.name, ('distinfo-pkg', 'egginfo-pkg')) | 
					
						
							|  |  |  |             self.assertEqual(ep.dist.version, "1.0.0") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |     def test_entry_points_unique_packages(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Entry points should only be exposed for the first package | 
					
						
							|  |  |  |         # on sys.path with a given name. | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |         alt_site_dir = self.fixtures.enter_context(fixtures.tempdir()) | 
					
						
							|  |  |  |         self.fixtures.enter_context(self.add_sys_path(alt_site_dir)) | 
					
						
							|  |  |  |         alt_pkg = { | 
					
						
							|  |  |  |             "distinfo_pkg-1.1.0.dist-info": { | 
					
						
							|  |  |  |                 "METADATA": """
 | 
					
						
							|  |  |  |                 Name: distinfo-pkg | 
					
						
							|  |  |  |                 Version: 1.1.0 | 
					
						
							|  |  |  |                 """,
 | 
					
						
							|  |  |  |                 "entry_points.txt": """
 | 
					
						
							|  |  |  |                 [entries] | 
					
						
							|  |  |  |                 main = mod:altmain | 
					
						
							|  |  |  |             """,
 | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         fixtures.build_files(alt_pkg, alt_site_dir) | 
					
						
							|  |  |  |         entries = entry_points(group='entries') | 
					
						
							|  |  |  |         assert not any( | 
					
						
							|  |  |  |             ep.dist.name == 'distinfo-pkg' and ep.dist.version == '1.0.0' | 
					
						
							|  |  |  |             for ep in entries | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         # ns:sub doesn't exist in alt_pkg | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         assert 'ns:sub' not in entries.names | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_missing_name(self): | 
					
						
							|  |  |  |         with self.assertRaises(KeyError): | 
					
						
							|  |  |  |             entry_points(group='entries')['missing'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_missing_group(self): | 
					
						
							|  |  |  |         assert entry_points(group='missing') == () | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_dict_construction(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Prior versions of entry_points() returned simple lists and | 
					
						
							|  |  |  |         # allowed casting those lists into maps by name using ``dict()``. | 
					
						
							|  |  |  |         # Capture this now deprecated use-case. | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         with suppress_known_deprecation() as caught: | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |             eps = dict(entry_points(group='entries')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         assert 'main' in eps | 
					
						
							|  |  |  |         assert eps['main'] == entry_points(group='entries')['main'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # check warning | 
					
						
							|  |  |  |         expected = next(iter(caught)) | 
					
						
							|  |  |  |         assert expected.category is DeprecationWarning | 
					
						
							|  |  |  |         assert "Construction of dict of EntryPoints is deprecated" in str(expected) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-31 12:19:42 -04:00
										 |  |  |     def test_entry_points_by_index(self): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Prior versions of Distribution.entry_points would return a | 
					
						
							|  |  |  |         tuple that allowed access by index. | 
					
						
							|  |  |  |         Capture this now deprecated use-case | 
					
						
							|  |  |  |         See python/importlib_metadata#300 and bpo-44246. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         eps = distribution('distinfo-pkg').entry_points | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         with suppress_known_deprecation() as caught: | 
					
						
							| 
									
										
										
										
											2021-05-31 12:19:42 -04:00
										 |  |  |             eps[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # check warning | 
					
						
							|  |  |  |         expected = next(iter(caught)) | 
					
						
							|  |  |  |         assert expected.category is DeprecationWarning | 
					
						
							|  |  |  |         assert "Accessing entry points by index is deprecated" in str(expected) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |     def test_entry_points_groups_getitem(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Prior versions of entry_points() returned a dict. Ensure | 
					
						
							|  |  |  |         # that callers using '.__getitem__()' are supported but warned to | 
					
						
							|  |  |  |         # migrate. | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         with suppress_known_deprecation(): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |             entry_points()['entries'] == entry_points(group='entries') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             with self.assertRaises(KeyError): | 
					
						
							|  |  |  |                 entry_points()['missing'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_entry_points_groups_get(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Prior versions of entry_points() returned a dict. Ensure | 
					
						
							|  |  |  |         # that callers using '.get()' are supported but warned to | 
					
						
							|  |  |  |         # migrate. | 
					
						
							| 
									
										
										
										
											2021-07-31 09:08:13 -04:00
										 |  |  |         with suppress_known_deprecation(): | 
					
						
							| 
									
										
										
										
											2021-03-13 11:31:45 -05:00
										 |  |  |             entry_points().get('missing', 'default') == 'default' | 
					
						
							|  |  |  |             entry_points().get('entries', 'default') == entry_points()['entries'] | 
					
						
							|  |  |  |             entry_points().get('missing', ()) == () | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |     def test_metadata_for_this_package(self): | 
					
						
							|  |  |  |         md = metadata('egginfo-pkg') | 
					
						
							|  |  |  |         assert md['author'] == 'Steven Ma' | 
					
						
							|  |  |  |         assert md['LICENSE'] == 'Unknown' | 
					
						
							|  |  |  |         assert md['Name'] == 'egginfo-pkg' | 
					
						
							|  |  |  |         classifiers = md.get_all('Classifier') | 
					
						
							|  |  |  |         assert 'Topic :: Software Development :: Libraries' in classifiers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |     def _test_files(files): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         root = files[0].root | 
					
						
							|  |  |  |         for file in files: | 
					
						
							|  |  |  |             assert file.root == root | 
					
						
							|  |  |  |             assert not file.hash or file.hash.value | 
					
						
							|  |  |  |             assert not file.hash or file.hash.mode == 'sha256' | 
					
						
							|  |  |  |             assert not file.size or file.size >= 0 | 
					
						
							|  |  |  |             assert file.locate().exists() | 
					
						
							|  |  |  |             assert isinstance(file.read_binary(), bytes) | 
					
						
							|  |  |  |             if file.name.endswith('.py'): | 
					
						
							|  |  |  |                 file.read_text() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_file_hash_repr(self): | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         util = [p for p in files('distinfo-pkg') if p.name == 'mod.py'][0] | 
					
						
							| 
									
										
										
										
											2021-12-16 15:49:42 -05:00
										 |  |  |         self.assertRegex(repr(util.hash), '<FileHash mode: sha256 value: .*>') | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_files_dist_info(self): | 
					
						
							|  |  |  |         self._test_files(files('distinfo-pkg')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_files_egg_info(self): | 
					
						
							|  |  |  |         self._test_files(files('egginfo-pkg')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_version_egg_info_file(self): | 
					
						
							|  |  |  |         self.assertEqual(version('egginfo-file'), '0.1') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_requires_egg_info_file(self): | 
					
						
							|  |  |  |         requirements = requires('egginfo-file') | 
					
						
							|  |  |  |         self.assertIsNone(requirements) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |     def test_requires_egg_info(self): | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         deps = requires('egginfo-pkg') | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         assert len(deps) == 2 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         assert any(dep == 'wheel >= 1.0; python_version >= "2.7"' for dep in deps) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_requires_dist_info(self): | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         deps = requires('distinfo-pkg') | 
					
						
							|  |  |  |         assert len(deps) == 2 | 
					
						
							|  |  |  |         assert all(deps) | 
					
						
							| 
									
										
										
										
											2019-09-02 11:08:03 -04:00
										 |  |  |         assert 'wheel >= 1.0' in deps | 
					
						
							|  |  |  |         assert "pytest; extra == 'test'" in deps | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_more_complex_deps_requires_text(self): | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         requires = textwrap.dedent( | 
					
						
							|  |  |  |             """
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |             dep1 | 
					
						
							|  |  |  |             dep2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             [:python_version < "3"] | 
					
						
							|  |  |  |             dep3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             [extra1] | 
					
						
							|  |  |  |             dep4 | 
					
						
							| 
									
										
										
										
											2021-12-16 15:48:35 -05:00
										 |  |  |             dep6@ git+https://example.com/python/dep.git@v1.0.0 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |             [extra2:python_version < "3"] | 
					
						
							|  |  |  |             dep5 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |             """
 | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         deps = sorted(Distribution._deps_from_requires_text(requires)) | 
					
						
							|  |  |  |         expected = [ | 
					
						
							|  |  |  |             'dep1', | 
					
						
							|  |  |  |             'dep2', | 
					
						
							|  |  |  |             'dep3; python_version < "3"', | 
					
						
							|  |  |  |             'dep4; extra == "extra1"', | 
					
						
							|  |  |  |             'dep5; (python_version < "3") and extra == "extra2"', | 
					
						
							| 
									
										
										
										
											2021-12-16 15:48:35 -05:00
										 |  |  |             'dep6@ git+https://example.com/python/dep.git@v1.0.0 ; extra == "extra1"', | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  |         # It's important that the environment marker expression be | 
					
						
							|  |  |  |         # wrapped in parentheses to avoid the following 'and' binding more | 
					
						
							|  |  |  |         # tightly than some other part of the environment expression. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         assert deps == expected | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-02 17:03:40 -04:00
										 |  |  |     def test_as_json(self): | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert md['keywords'] == ['sample', 'package'] | 
					
						
							|  |  |  |         desc = md['description'] | 
					
						
							|  |  |  |         assert desc.startswith('Once upon a time\nThere was') | 
					
						
							|  |  |  |         assert len(md['requires_dist']) == 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_as_json_egg_info(self): | 
					
						
							|  |  |  |         md = metadata('egginfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert md['keywords'] == ['sample', 'package'] | 
					
						
							|  |  |  |         desc = md['description'] | 
					
						
							|  |  |  |         assert desc.startswith('Once upon a time\nThere was') | 
					
						
							|  |  |  |         assert len(md['classifier']) == 2 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_as_json_odd_case(self): | 
					
						
							|  |  |  |         self.make_uppercase() | 
					
						
							|  |  |  |         md = metadata('distinfo-pkg').json | 
					
						
							|  |  |  |         assert 'name' in md | 
					
						
							|  |  |  |         assert len(md['requires_dist']) == 2 | 
					
						
							|  |  |  |         assert md['keywords'] == ['SAMPLE', 'PACKAGE'] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  | class LegacyDots(fixtures.DistInfoPkgWithDotLegacy, unittest.TestCase): | 
					
						
							|  |  |  |     def test_name_normalization(self): | 
					
						
							|  |  |  |         names = 'pkg.dot', 'pkg_dot', 'pkg-dot', 'pkg..dot', 'Pkg.Dot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.dot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_name_normalization_versionless_egg_info(self): | 
					
						
							|  |  |  |         names = 'pkg.lot', 'pkg_lot', 'pkg-lot', 'pkg..lot', 'Pkg.Lot' | 
					
						
							|  |  |  |         for name in names: | 
					
						
							|  |  |  |             with self.subTest(name): | 
					
						
							|  |  |  |                 assert distribution(name).metadata['Name'] == 'pkg.lot' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-24 19:59:01 -04:00
										 |  |  | class OffSysPathTests(fixtures.DistInfoPkgOffPath, unittest.TestCase): | 
					
						
							|  |  |  |     def test_find_distributions_specified_path(self): | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         dists = Distribution.discover(path=[str(self.site_dir)]) | 
					
						
							| 
									
										
										
										
											2020-12-31 12:56:43 -05:00
										 |  |  |         assert any(dist.metadata['Name'] == 'distinfo-pkg' for dist in dists) | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_distribution_at_pathlib(self): | 
					
						
							| 
									
										
										
										
											2021-04-02 12:35:32 -07:00
										 |  |  |         # Demonstrate how to load metadata direct from a directory. | 
					
						
							| 
									
										
										
										
											2019-09-10 14:53:31 +01:00
										 |  |  |         dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' | 
					
						
							|  |  |  |         dist = Distribution.at(dist_info_path) | 
					
						
							|  |  |  |         assert dist.version == '1.0.0' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_distribution_at_str(self): | 
					
						
							|  |  |  |         dist_info_path = self.site_dir / 'distinfo_pkg-1.0.0.dist-info' | 
					
						
							|  |  |  |         dist = Distribution.at(str(dist_info_path)) | 
					
						
							|  |  |  |         assert dist.version == '1.0.0' | 
					
						
							| 
									
										
										
										
											2021-04-24 10:13:51 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InvalidateCache(unittest.TestCase): | 
					
						
							|  |  |  |     def test_invalidate_cache(self): | 
					
						
							|  |  |  |         # No externally observable behavior, but ensures test coverage... | 
					
						
							|  |  |  |         importlib.invalidate_caches() |