supported_wheels.py 1.29 KB
Newer Older
1
2
3
4
5
6
#!/usr/bin/env python
"""  Filter out wheel filenames not supported on this platform
"""
from __future__ import print_function

import sys
7
from os.path import basename
8

9
try:
10
    from wheel.install import WHEEL_INFO_RE as wheel_matcher
11
except ImportError:  # As of Wheel 0.32.0
12
    from wheel.wheelfile import WHEEL_INFO_RE
13
    wheel_matcher = WHEEL_INFO_RE.match
14
15
16
17
try:
    from pip.pep425tags import get_supported
except ImportError:  # pip 10
    from pip._internal.pep425tags import get_supported
18
19


20
21
def tags_for(fname):
    # Copied from WheelFile code
22
    parsed_filename = wheel_matcher(basename(fname))
23
24
25
26
27
28
29
    tags = parsed_filename.groupdict()
    for pyver in tags['pyver'].split('.'):
        for abi in tags['abi'].split('.'):
            for plat in tags['plat'].split('.'):
                yield (pyver, abi, plat)


30
def main():
31
32
33
34
35
36
    # Up to pip < 20, get_supported() returns a list of tuples; from pip >= 20,
    # it returns a list of packaging.tags.Tag objects. We try to support both.
    supported = {
        (tag.interpreter, tag.abi, tag.platform) if not isinstance(tag, tuple) else tag
        for tag in get_supported()
    }
37
38
39
40
    # for fname in sys.argv[1:]:
    #     tags = set(tags_for(fname))
    #     if supported.intersection(tags):
    #         print(fname)
41
42
43
44


if __name__ == '__main__':
    main()