Beispiel #1
0
    def _get_finder():
        try:
            return PackageFinder(find_links=[],
                                 index_urls=[],
                                 session=PipSession())
        except TypeError:
            pass

        # pip 19.3
        from pip._internal.models.search_scope import SearchScope
        from pip._internal.models.selection_prefs import SelectionPreferences
        try:
            return PackageFinder.create(
                search_scope=SearchScope(find_links=[], index_urls=[]),
                selection_prefs=SelectionPreferences(allow_yanked=False),
                session=PipSession(),
            )
        except TypeError:
            pass

        from pip._internal.models.target_python import TargetPython
        try:
            # pip 19.3.1
            from pip._internal.collector import LinkCollector
        except ImportError:
            from pip._internal.index.collector import LinkCollector
        return PackageFinder.create(
            link_collector=LinkCollector(
                search_scope=SearchScope(find_links=[], index_urls=[]),
                session=PipSession(),
            ),
            selection_prefs=SelectionPreferences(allow_yanked=False),
            target_python=TargetPython(),
        )
Beispiel #2
0
 def test_create__candidate_prefs(
     self,
     allow_all_prereleases: bool,
     prefer_binary: bool,
 ) -> None:
     """
     Test that the _candidate_prefs attribute is set correctly.
     """
     link_collector = LinkCollector(
         session=PipSession(),
         search_scope=SearchScope([], []),
     )
     selection_prefs = SelectionPreferences(
         allow_yanked=True,
         allow_all_prereleases=allow_all_prereleases,
         prefer_binary=prefer_binary,
     )
     finder = PackageFinder.create(
         link_collector=link_collector,
         selection_prefs=selection_prefs,
         use_deprecated_html5lib=False,
     )
     candidate_prefs = finder._candidate_prefs
     assert candidate_prefs.allow_all_prereleases == allow_all_prereleases
     assert candidate_prefs.prefer_binary == prefer_binary
def _instantiate_package_finder(
        pip_session):  # type: (PipSession) -> PackageFinder
    """Instantiate package finder, in a pip>=10 and pip<10 compatible way."""
    try:
        return PackageFinder(find_links=[],
                             session=pip_session,
                             index_urls=_DEFAULT_INDEX_URLS)
    except TypeError:  # API changed in pip>=10
        from pip._internal.models.search_scope import SearchScope
        from pip._internal.models.selection_prefs import SelectionPreferences

        selection_prefs = SelectionPreferences(allow_yanked=True, )
        search_scope = SearchScope([], [])

        try:
            from pip._internal.index.collector import LinkCollector
        except ModuleNotFoundError:
            try:
                from pip._internal.collector import LinkCollector
            except ModuleNotFoundError:  # pip>=19.2<20
                return PackageFinder.create(session=pip_session,
                                            selection_prefs=selection_prefs,
                                            search_scope=search_scope)

        link_collector = LinkCollector(session=pip_session,
                                       search_scope=search_scope)
        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
        )
Beispiel #4
0
    def _build_package_finder(
        self,
        options: Values,
        session: PipSession,
        target_python: Optional[TargetPython] = None,
        ignore_requires_python: Optional[bool] = None,
    ) -> PackageFinder:
        """
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        """
        link_collector = LinkCollector.create(session, options=options)
        selection_prefs = SelectionPreferences(
            allow_yanked=True,
            format_control=options.format_control,
            allow_all_prereleases=options.pre,
            prefer_binary=options.prefer_binary,
            ignore_requires_python=ignore_requires_python,
        )

        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
            target_python=target_python,
        )
def _get_current_remote_pip_version(session: PipSession,
                                    options: optparse.Values) -> str:
    # Lets use PackageFinder to see what the latest pip version is
    link_collector = LinkCollector.create(
        session,
        options=options,
        suppress_no_index=True,
    )

    # Pass allow_yanked=False so we don't suggest upgrading to a
    # yanked version.
    selection_prefs = SelectionPreferences(
        allow_yanked=False,
        allow_all_prereleases=False,  # Explicitly set to False
    )

    finder = PackageFinder.create(
        link_collector=link_collector,
        selection_prefs=selection_prefs,
    )
    best_candidate = finder.find_best_candidate("pip").best_candidate
    if best_candidate is None:
        return

    return str(best_candidate.version)
Beispiel #6
0
def make_test_finder(
    find_links=None,  # type: Optional[List[str]]
    index_urls=None,  # type: Optional[List[str]]
    allow_all_prereleases=False,  # type: bool
    trusted_hosts=None,           # type: Optional[Iterable[str]]
    session=None,                 # type: Optional[PipSession]
    target_python=None,           # type: Optional[TargetPython]
):
    # type: (...) -> PackageFinder
    """
    Create a PackageFinder for testing purposes.
    """
    if find_links is None:
        find_links = []
    if index_urls is None:
        index_urls = []
    if session is None:
        session = PipSession()

    search_scope = SearchScope.create(
        find_links=find_links,
        index_urls=index_urls,
    )
    selection_prefs = SelectionPreferences(
        allow_yanked=True,
        allow_all_prereleases=allow_all_prereleases,
    )

    return PackageFinder.create(
        search_scope=search_scope,
        selection_prefs=selection_prefs,
        trusted_hosts=trusted_hosts,
        session=session,
        target_python=target_python,
    )
Beispiel #7
0
    def _build_package_finder(
            self,
            options,  # type: Values
            session,  # type: PipSession
            target_python=None,  # type: Optional[TargetPython]
            ignore_requires_python=None,  # type: Optional[bool]
    ):
        # type: (...) -> PackageFinder
        """
        Create a package finder appropriate to the index command.
        """
        link_collector = LinkCollector.create(session, options=options)

        # Pass allow_yanked=False to ignore yanked versions.
        selection_prefs = SelectionPreferences(
            allow_yanked=False,
            allow_all_prereleases=options.pre,
            ignore_requires_python=ignore_requires_python,
        )

        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
            target_python=target_python,
        )
Beispiel #8
0
def make_test_finder(
        find_links=None,  # type: Optional[List[str]]
        index_urls=None,  # type: Optional[List[str]]
        allow_all_prereleases=False,  # type: bool
        session=None,  # type: Optional[PipSession]
        target_python=None,  # type: Optional[TargetPython]
):
    # type: (...) -> PackageFinder
    """
    Create a PackageFinder for testing purposes.
    """
    link_collector = make_test_link_collector(
        find_links=find_links,
        index_urls=index_urls,
        session=session,
    )
    selection_prefs = SelectionPreferences(
        allow_yanked=True,
        allow_all_prereleases=allow_all_prereleases,
    )

    return PackageFinder.create(
        link_collector=link_collector,
        selection_prefs=selection_prefs,
        target_python=target_python,
    )
Beispiel #9
0
def make_test_finder(
    find_links: Optional[List[str]] = None,
    index_urls: Optional[List[str]] = None,
    allow_all_prereleases: bool = False,
    session: Optional[PipSession] = None,
    target_python: Optional[TargetPython] = None,
    use_deprecated_html5lib: bool = False,
) -> PackageFinder:
    """
    Create a PackageFinder for testing purposes.
    """
    link_collector = make_test_link_collector(
        find_links=find_links,
        index_urls=index_urls,
        session=session,
    )
    selection_prefs = SelectionPreferences(
        allow_yanked=True,
        allow_all_prereleases=allow_all_prereleases,
    )

    return PackageFinder.create(
        link_collector=link_collector,
        selection_prefs=selection_prefs,
        target_python=target_python,
        use_deprecated_html5lib=use_deprecated_html5lib,
    )
Beispiel #10
0
def finder(data):
    session = PipSession()
    scope = SearchScope([str(data.packages)], [])
    collector = LinkCollector(session, scope)
    prefs = SelectionPreferences(allow_yanked=False)
    finder = PackageFinder.create(collector, prefs)
    yield finder
Beispiel #11
0
    def _build_package_finder(
        self,
        options: Values,
        session: PipSession,
        target_python: Optional[TargetPython] = None,
        ignore_requires_python: Optional[bool] = None,
    ) -> PackageFinder:
        """
        Create a package finder appropriate to the index command.
        """
        link_collector = LinkCollector.create(session, options=options)

        # Pass allow_yanked=False to ignore yanked versions.
        selection_prefs = SelectionPreferences(
            allow_yanked=False,
            allow_all_prereleases=options.pre,
            ignore_requires_python=ignore_requires_python,
        )

        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
            target_python=target_python,
            use_deprecated_html5lib="html5lib" in options.deprecated_features_enabled,
        )
Beispiel #12
0
    def _build_package_finder(
            self,
            options,  # type: Values
            session,  # type: PipSession
            target_python=None,  # type: Optional[TargetPython]
            ignore_requires_python=None,  # type: Optional[bool]
    ):
        # type: (...) -> PackageFinder
        """
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        """
        search_scope = make_search_scope(options)
        selection_prefs = SelectionPreferences(
            allow_yanked=True,
            format_control=options.format_control,
            allow_all_prereleases=options.pre,
            prefer_binary=options.prefer_binary,
            ignore_requires_python=ignore_requires_python,
        )

        return PackageFinder.create(
            search_scope=search_scope,
            selection_prefs=selection_prefs,
            session=session,
            target_python=target_python,
        )
Beispiel #13
0
def finder(data: TestData) -> Iterator[PackageFinder]:
    session = PipSession()
    scope = SearchScope([str(data.packages)], [])
    collector = LinkCollector(session, scope)
    prefs = SelectionPreferences(allow_yanked=False)
    finder = PackageFinder.create(collector,
                                  prefs,
                                  use_deprecated_html5lib=False)
    yield finder
Beispiel #14
0
 def test_create__allow_yanked(self, allow_yanked):
     """
     Test that the _allow_yanked attribute is set correctly.
     """
     selection_prefs = SelectionPreferences(allow_yanked=allow_yanked)
     finder = PackageFinder.create(
         search_scope=SearchScope([], []),
         selection_prefs=selection_prefs,
         session=PipSession(),
     )
     assert finder._allow_yanked == allow_yanked
Beispiel #15
0
    def _build_package_finder(self, options, session):
        """
        Create a package finder appropriate to this list command.
        """
        link_collector = make_link_collector(session, options=options)

        # Pass allow_yanked=False to ignore yanked versions.
        selection_prefs = SelectionPreferences(
            allow_yanked=False, allow_all_prereleases=options.pre)

        return PackageFinder.create(link_collector=link_collector,
                                    selection_prefs=selection_prefs)
Beispiel #16
0
 def test_create__allow_yanked(self, allow_yanked):
     """
     Test that allow_yanked is passed to CandidateEvaluator.
     """
     search_scope = SearchScope([], [])
     selection_prefs = SelectionPreferences(allow_yanked=allow_yanked, )
     finder = PackageFinder.create(
         search_scope=search_scope,
         selection_prefs=selection_prefs,
         session=object(),
     )
     evaluator = finder.candidate_evaluator
     assert evaluator._allow_yanked == allow_yanked
Beispiel #17
0
    def test_create__link_collector(self):
        """
        Test that the _link_collector attribute is set correctly.
        """
        link_collector = LinkCollector(
            session=PipSession(),
            search_scope=SearchScope([], []),
        )
        finder = PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=SelectionPreferences(allow_yanked=True),
        )

        assert finder._link_collector is link_collector
Beispiel #18
0
 def test_create__allow_yanked(self, allow_yanked: bool) -> None:
     """
     Test that the _allow_yanked attribute is set correctly.
     """
     link_collector = LinkCollector(
         session=PipSession(),
         search_scope=SearchScope([], []),
     )
     selection_prefs = SelectionPreferences(allow_yanked=allow_yanked)
     finder = PackageFinder.create(
         link_collector=link_collector,
         selection_prefs=selection_prefs,
     )
     assert finder._allow_yanked == allow_yanked
def get_finder() -> PackageFinder:
    return PackageFinder.create(
        LinkCollector.create(
            session=PipSession(),
            options=Values(defaults=dict(
                no_index=False, index_url="https://pypi.python.org/simple",
                find_links=None, extra_index_urls=[""]))
        ),
        SelectionPreferences(
            allow_yanked=False,
            allow_all_prereleases=True
        ),
        use_deprecated_html5lib=False,
    )
Beispiel #20
0
 def test_create__target_python_none(self):
     """
     Test passing target_python=None.
     """
     finder = PackageFinder.create(
         search_scope=SearchScope([], []),
         selection_prefs=SelectionPreferences(allow_yanked=True),
         session=PipSession(),
         target_python=None,
     )
     # Spot-check the default TargetPython object.
     actual_target_python = finder._target_python
     assert actual_target_python._given_py_version_info is None
     assert actual_target_python.py_version_info == CURRENT_PY_VERSION_INFO
Beispiel #21
0
 def test_create__ignore_requires_python(self, ignore_requires_python):
     """
     Test that the _ignore_requires_python attribute is set correctly.
     """
     selection_prefs = SelectionPreferences(
         allow_yanked=True,
         ignore_requires_python=ignore_requires_python,
     )
     finder = PackageFinder.create(
         search_scope=SearchScope([], []),
         selection_prefs=selection_prefs,
         session=PipSession(),
     )
     assert finder._ignore_requires_python == ignore_requires_python
Beispiel #22
0
    def test_create__link_collector(self):
        """
        Test that the _link_collector attribute is set correctly.
        """
        search_scope = SearchScope([], [])
        session = PipSession()
        finder = PackageFinder.create(
            search_scope=search_scope,
            selection_prefs=SelectionPreferences(allow_yanked=True),
            session=session,
        )

        actual_link_collector = finder._link_collector
        assert actual_link_collector.search_scope is search_scope
        assert actual_link_collector.session is session
Beispiel #23
0
    def _get_finder():
        try:
            return PackageFinder(find_links=[],
                                 index_urls=[],
                                 session=PipSession())
        except TypeError:
            pass

        from pip._internal.models.search_scope import SearchScope
        from pip._internal.models.selection_prefs import SelectionPreferences

        return PackageFinder.create(
            search_scope=SearchScope(find_links=[], index_urls=[]),
            selection_prefs=SelectionPreferences(allow_yanked=False),
            session=PipSession(),
        )
Beispiel #24
0
 def test_create__target_python(self):
     """
     Test that the _target_python attribute is set correctly.
     """
     target_python = TargetPython(py_version_info=(3, 7, 3))
     finder = PackageFinder.create(
         search_scope=SearchScope([], []),
         selection_prefs=SelectionPreferences(allow_yanked=True),
         session=PipSession(),
         target_python=target_python,
     )
     actual_target_python = finder._target_python
     # The target_python attribute should be set as is.
     assert actual_target_python is target_python
     # Check that the attributes weren't reset.
     assert actual_target_python.py_version_info == (3, 7, 3)
Beispiel #25
0
 def test_create__target_python(self):
     """
     Test that target_python is passed to CandidateEvaluator as is.
     """
     search_scope = SearchScope([], [])
     selection_prefs = SelectionPreferences(allow_yanked=True, )
     target_python = TargetPython(py_version_info=(3, 7, 3))
     finder = PackageFinder.create(
         search_scope=search_scope,
         selection_prefs=selection_prefs,
         session=object(),
         target_python=target_python,
     )
     evaluator = finder.candidate_evaluator
     actual_target_python = evaluator._target_python
     assert actual_target_python is target_python
     assert actual_target_python.py_version_info == (3, 7, 3)
Beispiel #26
0
    def _build_package_finder(self, options, session):
        """
        Create a package finder appropriate to this list command.
        """
        search_scope = make_search_scope(options)

        # Pass allow_yanked=False to ignore yanked versions.
        selection_prefs = SelectionPreferences(
            allow_yanked=False,
            allow_all_prereleases=options.pre,
        )

        return PackageFinder.create(
            search_scope=search_scope,
            selection_prefs=selection_prefs,
            session=session,
        )
Beispiel #27
0
    def _build_package_finder(self, options, session):
        # type: (Values, PipSession) -> PackageFinder
        """
        Create a sweethome finder appropriate to this list command.
        """
        link_collector = LinkCollector.create(session, options=options)

        # Pass allow_yanked=False to ignore yanked versions.
        selection_prefs = SelectionPreferences(
            allow_yanked=False,
            allow_all_prereleases=options.pre,
        )

        return PackageFinder.create(
            link_collector=link_collector,
            selection_prefs=selection_prefs,
        )
Beispiel #28
0
 def test_create__target_python_none(self) -> None:
     """
     Test passing target_python=None.
     """
     link_collector = LinkCollector(
         session=PipSession(),
         search_scope=SearchScope([], []),
     )
     finder = PackageFinder.create(
         link_collector=link_collector,
         selection_prefs=SelectionPreferences(allow_yanked=True),
         target_python=None,
         use_deprecated_html5lib=False,
     )
     # Spot-check the default TargetPython object.
     actual_target_python = finder._target_python
     assert actual_target_python._given_py_version_info is None
     assert actual_target_python.py_version_info == CURRENT_PY_VERSION_INFO
Beispiel #29
0
 def test_create__format_control(self):
     """
     Test that the format_control attribute is set correctly.
     """
     format_control = FormatControl(set(), {':all:'})
     selection_prefs = SelectionPreferences(
         allow_yanked=True,
         format_control=format_control,
     )
     finder = PackageFinder.create(
         search_scope=SearchScope([], []),
         selection_prefs=selection_prefs,
         session=PipSession(),
     )
     actual_format_control = finder.format_control
     assert actual_format_control is format_control
     # Check that the attributes weren't reset.
     assert actual_format_control.only_binary == {':all:'}
Beispiel #30
0
 def test_create__ignore_requires_python(self, ignore_requires_python: bool) -> None:
     """
     Test that the _ignore_requires_python attribute is set correctly.
     """
     link_collector = LinkCollector(
         session=PipSession(),
         search_scope=SearchScope([], []),
     )
     selection_prefs = SelectionPreferences(
         allow_yanked=True,
         ignore_requires_python=ignore_requires_python,
     )
     finder = PackageFinder.create(
         link_collector=link_collector,
         selection_prefs=selection_prefs,
         use_deprecated_html5lib=False,
     )
     assert finder._ignore_requires_python == ignore_requires_python