Beispiel #1
0
    def test_not_supported_multiarch_darwin(self):
        """
        Single-arch wheels (x86_64) are not supported on multi-arch (intel)
        """
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_universal"):
            universal = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_intel"):
            intel = pep425tags.get_supported(["27"], False)

        w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_5_i386.whl")
        assert not w.supported(tags=intel)
        assert not w.supported(tags=universal)
        w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_5_x86_64.whl")
        assert not w.supported(tags=intel)
        assert not w.supported(tags=universal)
Beispiel #2
0
 def test_not_supported_osx_version(self):
     """
     Wheels built for OS X 10.9 are not supported on 10.6
     """
     tags = pep425tags.get_supported(['27'], False)
     w = wheel.Wheel('simple-0.1-cp27-none-macosx_10_9_intel.whl')
     assert not w.supported(tags=tags)
Beispiel #3
0
 def test_supported_osx_version(self):
     """
     Wheels built for OS X 10.6 are supported on 10.9
     """
     tags = pep425tags.get_supported(["27"], False)
     w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_6_intel.whl")
     assert w.supported(tags=tags)
     w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_9_intel.whl")
     assert w.supported(tags=tags)
Beispiel #4
0
    def test_supported_multiarch_darwin(self):
        """
        Multi-arch wheels (intel) are supported on components (i386, x86_64)
        """
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_universal"):
            universal = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_intel"):
            intel = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_x86_64"):
            x64 = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_i386"):
            i386 = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_ppc"):
            ppc = pep425tags.get_supported(["27"], False)
        with patch("pip.pep425tags.get_platform", lambda: "macosx_10_5_ppc64"):
            ppc64 = pep425tags.get_supported(["27"], False)

        w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_5_intel.whl")
        assert w.supported(tags=intel)
        assert w.supported(tags=x64)
        assert w.supported(tags=i386)
        assert not w.supported(tags=universal)
        assert not w.supported(tags=ppc)
        assert not w.supported(tags=ppc64)
        w = wheel.Wheel("simple-0.1-cp27-none-macosx_10_5_universal.whl")
        assert w.supported(tags=universal)
        assert w.supported(tags=intel)
        assert w.supported(tags=x64)
        assert w.supported(tags=i386)
        assert w.supported(tags=ppc)
        assert w.supported(tags=ppc64)
def install_compat():
    spec_plat = get_specific_platform()
    if spec_plat is None:
        return None
    this_plat = spec_plat[0]
    compat_plat = compatible_platforms.get(this_plat, None)
    rval = {}
    if compat_plat:
        print('{0} is binary compatible with {1} (and can install {2} wheels)'
              .format(this_plat, compat_plat, compat_plat),
              file=sys.stderr)
        for py, abi, plat in get_supported():
            if this_plat in plat:
                rval[plat] = {'install': [plat.replace(this_plat, compat_plat)]}
    return rval
Beispiel #6
0
    def test_manylinux1_tag_is_first(self):
        """
        Test that the more specific tag manylinux1 comes first.
        """
        groups = {}
        for pyimpl, abi, arch in pep425tags.get_supported():
            groups.setdefault((pyimpl, abi), []).append(arch)

        for arches in groups.values():
            if arches == ['any']:
                continue
            # Expect the most specific arch first:
            if len(arches) == 3:
                assert arches == ['manylinux1_x86_64', 'linux_x86_64', 'any']
            else:
                assert arches == ['manylinux1_x86_64', 'linux_x86_64']
Beispiel #7
0
    def __init__(self, find_links, index_urls, allow_all_prereleases=False,
                 trusted_hosts=None, process_dependency_links=False,
                 session=None, format_control=None, platform=None,
                 versions=None, abi=None, implementation=None):
        """Create a PackageFinder.

        :param format_control: A FormatControl object or None. Used to control
            the selection of source packages / binary packages when consulting
            the index and links.
        :param platform: A string or None. If None, searches for packages
            that are supported by the current system. Otherwise, will find
            packages that can be built on the platform passed in. These
            packages will only be downloaded for distribution: they will
            not be built locally.
        :param versions: A list of strings or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        :param abi: A string or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        :param implementation: A string or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        """
        if session is None:
            raise TypeError(
                "PackageFinder() missing 1 required keyword argument: "
                "'session'"
            )

        # Build find_links. If an argument starts with ~, it may be
        # a local file relative to a home directory. So try normalizing
        # it and if it exists, use the normalized version.
        # This is deliberately conservative - it might be fine just to
        # blindly normalize anything starting with a ~...
        self.find_links = []
        for link in find_links:
            if link.startswith('~'):
                new_link = normalize_path(link)
                if os.path.exists(new_link):
                    link = new_link
            self.find_links.append(link)

        self.index_urls = index_urls
        self.dependency_links = []

        # These are boring links that have already been logged somehow:
        self.logged_links = set()

        self.format_control = format_control or FormatControl(set(), set())

        # Domains that we won't emit warnings for when not using HTTPS
        self.secure_origins = [
            ("*", host, "*")
            for host in (trusted_hosts if trusted_hosts else [])
        ]

        # Do we want to allow _all_ pre-releases?
        self.allow_all_prereleases = allow_all_prereleases

        # Do we process dependency links?
        self.process_dependency_links = process_dependency_links

        # The Session we'll use to make requests
        self.session = session

        # The valid tags to check potential found wheel candidates against
        self.valid_tags = get_supported(
            versions=versions,
            platform=platform,
            abi=abi,
            impl=implementation,
        )

        # If we don't have TLS enabled, then WARN if anyplace we're looking
        # relies on TLS.
        if not HAS_TLS:
            for link in itertools.chain(self.index_urls, self.find_links):
                parsed = urllib_parse.urlparse(link)
                if parsed.scheme == "https":
                    logger.warning(
                        "pip is configured with locations that require "
                        "TLS/SSL, however the ssl module in Python is not "
                        "available."
                    )
                    break
def main():
    supported = set(get_supported())
    for fname in sys.argv[1:]:
        tags = set(tags_for(fname))
        if supported.intersection(tags):
            print(fname)
def main():
    supported = set(get_supported())
    for fname in sys.argv[1:]:
        tags = set(WheelFile(fname).tags)
        if supported.intersection(tags):
            print(fname)
Beispiel #10
0
    def __init__(self,
                 find_links,
                 index_urls,
                 allow_all_prereleases=False,
                 trusted_hosts=None,
                 process_dependency_links=False,
                 session=None,
                 format_control=None,
                 platform=None,
                 versions=None,
                 abi=None,
                 implementation=None):
        """Create a PackageFinder.

        :param format_control: A FormatControl object or None. Used to control
            the selection of source packages / binary packages when consulting
            the index and links.
        :param platform: A string or None. If None, searches for packages
            that are supported by the current system. Otherwise, will find
            packages that can be built on the platform passed in. These
            packages will only be downloaded for distribution: they will
            not be built locally.
        :param versions: A list of strings or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        :param abi: A string or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        :param implementation: A string or None. This is passed directly
            to pep425tags.py in the get_supported() method.
        """
        if session is None:
            raise TypeError(
                "PackageFinder() missing 1 required keyword argument: "
                "'session'")

        # Build find_links. If an argument starts with ~, it may be
        # a local file relative to a home directory. So try normalizing
        # it and if it exists, use the normalized version.
        # This is deliberately conservative - it might be fine just to
        # blindly normalize anything starting with a ~...
        self.find_links = []
        for link in find_links:
            if link.startswith('~'):
                new_link = normalize_path(link)
                if os.path.exists(new_link):
                    link = new_link
            self.find_links.append(link)

        self.index_urls = index_urls
        self.dependency_links = []

        # These are boring links that have already been logged somehow:
        self.logged_links = set()

        self.format_control = format_control or FormatControl(set(), set())

        # Domains that we won't emit warnings for when not using HTTPS
        self.secure_origins = [
            ("*", host, "*")
            for host in (trusted_hosts if trusted_hosts else [])
        ]

        # Do we want to allow _all_ pre-releases?
        self.allow_all_prereleases = allow_all_prereleases

        # Do we process dependency links?
        self.process_dependency_links = process_dependency_links

        # The Session we'll use to make requests
        self.session = session

        # The valid tags to check potential found wheel candidates against
        self.valid_tags = get_supported(
            versions=versions,
            platform=platform,
            abi=abi,
            impl=implementation,
        )

        # If we don't have TLS enabled, then WARN if anyplace we're looking
        # relies on TLS.
        if not HAS_TLS:
            for link in itertools.chain(self.index_urls, self.find_links):
                parsed = urllib_parse.urlparse(link)
                if parsed.scheme == "https":
                    logger.warning(
                        "pip is configured with locations that require "
                        "TLS/SSL, however the ssl module in Python is not "
                        "available.")
                    break
Beispiel #11
0
 def supported(self, tags=None):
     # type: (Optional[List[Pep425Tag]]) -> bool
     """Is this wheel supported on this system?"""
     if tags is None:  # for mock
         tags = pep425tags.get_supported()
     return bool(set(tags).intersection(self.file_tags))