File: test_py39_compat.py

package info (click to toggle)
python-importlib-metadata 8.7.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 444 kB
  • sloc: python: 1,981; sh: 7; makefile: 3
file content (74 lines) | stat: -rw-r--r-- 2,578 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import pathlib
import sys
import unittest

from importlib_metadata import (
    distribution,
    distributions,
    entry_points,
    metadata,
    version,
)

from .. import fixtures


class OldStdlibFinderTests(fixtures.DistInfoPkgOffPath, unittest.TestCase):
    def setUp(self):
        if sys.version_info >= (3, 10):
            self.skipTest("Tests specific for Python 3.8/3.9")
        super().setUp()

    def _meta_path_finder(self):
        from importlib.metadata import (
            Distribution,
            DistributionFinder,
            PathDistribution,
        )
        from importlib.util import spec_from_file_location

        path = pathlib.Path(self.site_dir)

        class CustomDistribution(Distribution):
            def __init__(self, name, path):
                self.name = name
                self._path_distribution = PathDistribution(path)

            def read_text(self, filename):
                return self._path_distribution.read_text(filename)

            def locate_file(self, path):
                return self._path_distribution.locate_file(path)

        class CustomFinder:
            @classmethod
            def find_spec(cls, fullname, _path=None, _target=None):
                candidate = pathlib.Path(path, *fullname.split(".")).with_suffix(".py")
                if candidate.exists():
                    return spec_from_file_location(fullname, candidate)

            @classmethod
            def find_distributions(self, context=DistributionFinder.Context()):
                for dist_info in path.glob("*.dist-info"):
                    yield PathDistribution(dist_info)
                    name, _, _ = str(dist_info).partition("-")
                    yield CustomDistribution(name + "_custom", dist_info)

        return CustomFinder

    def test_compatibility_with_old_stdlib_path_distribution(self):
        """
        Given a custom finder that uses Python 3.8/3.9 importlib.metadata is installed,
        when importlib_metadata functions are called, there should be no exceptions.
        Ref python/importlib_metadata#396.
        """
        self.fixtures.enter_context(fixtures.install_finder(self._meta_path_finder()))

        assert list(distributions())
        assert distribution("distinfo_pkg")
        assert distribution("distinfo_pkg_custom")
        assert version("distinfo_pkg") > "0"
        assert version("distinfo_pkg_custom") > "0"
        assert list(metadata("distinfo_pkg"))
        assert list(metadata("distinfo_pkg_custom"))
        assert list(entry_points(group="entries"))