File: utils.py

package info (click to toggle)
pytest-doctestplus 1.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 352 kB
  • sloc: python: 2,016; makefile: 13; sh: 7
file content (38 lines) | stat: -rw-r--r-- 1,113 bytes parent folder | download
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
import importlib.util

from importlib.metadata import distribution
from packaging.requirements import Requirement


class ModuleChecker:

    def find_module(self, module):
        """Search for modules specification."""
        try:
            return importlib.util.find_spec(module)
        except ImportError:
            return None

    def find_distribution(self, dist):
        """Search for distribution with specified version (eg 'numpy>=1.15')."""
        try:
            reqs = Requirement(dist)
            dist_meta = distribution(reqs.name)
        except Exception:
            return None
        else:
            if reqs.specifier.contains(dist_meta.version, prereleases=True):
                return dist_meta
            else:
                return None

    def check(self, module):
        """
        Return True if module with specified version exists.
        >>> ModuleChecker().check('foo>=1.0')
        False
        >>> ModuleChecker().check('pytest>1.0')
        True
        """
        mods = self.find_module(module) or self.find_distribution(module)
        return bool(mods)