From ce413df4cf8605dfb17edc5f5a99a020c34dfa5d Mon Sep 17 00:00:00 2001 From: Albert Tugushev Date: Thu, 14 Feb 2019 02:47:11 +0300 Subject: [PATCH] Show default index url provided by pip --- piptools/pip.py | 30 ++++++++++++++++++++++++++++++ piptools/scripts/compile.py | 27 ++------------------------- tests/test_cli_compile.py | 16 ++++++++++++++++ tests/test_repositories.py | 2 +- tests/test_repository_local.py | 2 +- tests/test_repository_pypi.py | 2 +- tests/test_top_level_editable.py | 2 +- 7 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 piptools/pip.py diff --git a/piptools/pip.py b/piptools/pip.py new file mode 100644 index 000000000..2bcefa70b --- /dev/null +++ b/piptools/pip.py @@ -0,0 +1,30 @@ +import optparse + +from ._compat import Command, cmdoptions + + +class PipCommand(Command): + name = 'PipCommand' + + +def get_pip_command(): + # Use pip's parser for pip.conf management and defaults. + # General options (find_links, index_url, extra_index_url, trusted_host, + # and pre) are defered to pip. + pip_command = PipCommand() + pip_command.parser.add_option(cmdoptions.no_binary()) + pip_command.parser.add_option(cmdoptions.only_binary()) + index_opts = cmdoptions.make_option_group( + cmdoptions.index_group, + pip_command.parser, + ) + pip_command.parser.insert_option_group(0, index_opts) + pip_command.parser.add_option(optparse.Option('--pre', action='store_true', default=False)) + + return pip_command + + +pip_command = get_pip_command() + +# Get default values of the pip's options (including options from pip.conf). +pip_defaults = pip_command.parser.get_default_values() diff --git a/piptools/scripts/compile.py b/piptools/scripts/compile.py index 87923c83d..d01a1e887 100755 --- a/piptools/scripts/compile.py +++ b/piptools/scripts/compile.py @@ -2,7 +2,6 @@ from __future__ import (absolute_import, division, print_function, unicode_literals) -import optparse import os import sys import tempfile @@ -10,13 +9,12 @@ from .._compat import ( install_req_from_line, parse_requirements, - cmdoptions, - Command, ) from .. import click from ..exceptions import PipToolsError from ..logging import log +from ..pip import get_pip_command, pip_defaults from ..repositories import LocalRequirementsRepository, PyPIRepository from ..resolver import Resolver from ..utils import (dedup, is_pinned_requirement, key_from_req, UNSAFE_PACKAGES) @@ -25,10 +23,6 @@ DEFAULT_REQUIREMENTS_FILE = 'requirements.in' -class PipCommand(Command): - name = 'PipCommand' - - @click.command() @click.version_option() @click.option('-v', '--verbose', count=True, help="Show more output") @@ -37,7 +31,7 @@ class PipCommand(Command): @click.option('-p', '--pre', is_flag=True, default=None, help="Allow resolving to prereleases (default is not)") @click.option('-r', '--rebuild', is_flag=True, help="Clear any caches upfront, rebuild from scratch") @click.option('-f', '--find-links', multiple=True, help="Look for archives in this directory or on this HTML page", envvar='PIP_FIND_LINKS') # noqa -@click.option('-i', '--index-url', help="Change index URL (defaults to PyPI)", envvar='PIP_INDEX_URL') +@click.option('-i', '--index-url', help="Change index URL (defaults to {})".format(pip_defaults.index_url), envvar='PIP_INDEX_URL') # noqa @click.option('--extra-index-url', multiple=True, help="Add additional index URL to search", envvar='PIP_EXTRA_INDEX_URL') # noqa @click.option('--cert', help="Path to alternate CA bundle.") @click.option('--client-cert', help="Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.") # noqa @@ -254,20 +248,3 @@ def cli(verbose, quiet, dry_run, pre, rebuild, find_links, index_url, extra_inde if dry_run: log.warning('Dry-run, so nothing updated.') - - -def get_pip_command(): - # Use pip's parser for pip.conf management and defaults. - # General options (find_links, index_url, extra_index_url, trusted_host, - # and pre) are defered to pip. - pip_command = PipCommand() - pip_command.parser.add_option(cmdoptions.no_binary()) - pip_command.parser.add_option(cmdoptions.only_binary()) - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - pip_command.parser, - ) - pip_command.parser.insert_option_group(0, index_opts) - pip_command.parser.add_option(optparse.Option('--pre', action='store_true', default=False)) - - return pip_command diff --git a/tests/test_cli_compile.py b/tests/test_cli_compile.py index 318ecc1d9..51d66c0e1 100644 --- a/tests/test_cli_compile.py +++ b/tests/test_cli_compile.py @@ -382,3 +382,19 @@ def test_no_candidates_pre(): assert out.exit_code == 2 assert 'Tried pre-versions:' in out.output + + +@pytest.mark.usefixtures('pip_conf') +def test_default_index_url(): + status, output = invoke([sys.executable, '-m', 'piptools', 'compile', '--help']) + output = output.decode('utf-8') + + # Click's subprocess output has \r\r\n line endings on win py27. Fix it. + output = output.replace('\r\r', '\r') + + assert status == 0 + expected = ( + ' -i, --index-url TEXT Change index URL (defaults to' + os.linesep + + ' http://example.com)' + os.linesep + ) + assert expected in output diff --git a/tests/test_repositories.py b/tests/test_repositories.py index 8c3e557b4..586ec5c4e 100644 --- a/tests/test_repositories.py +++ b/tests/test_repositories.py @@ -4,7 +4,7 @@ from piptools._compat import PackageFinder, install_req_from_line from piptools.repositories.pypi import PyPIRepository -from piptools.scripts.compile import get_pip_command +from piptools.pip import get_pip_command import pytest diff --git a/tests/test_repository_local.py b/tests/test_repository_local.py index 62fe6d4a4..ad778c974 100644 --- a/tests/test_repository_local.py +++ b/tests/test_repository_local.py @@ -1,7 +1,7 @@ -from piptools.scripts.compile import get_pip_command from piptools.repositories.local import LocalRequirementsRepository from piptools.repositories.pypi import PyPIRepository from piptools.utils import name_from_req +from piptools.pip import get_pip_command EXPECTED = { 'sha256:04b133ef629ae2bc05f83d0b079a964494a9cd17914943e690c57209b44aae20', diff --git a/tests/test_repository_pypi.py b/tests/test_repository_pypi.py index 7348dbf09..f6aeb603e 100644 --- a/tests/test_repository_pypi.py +++ b/tests/test_repository_pypi.py @@ -1,4 +1,4 @@ -from piptools.scripts.compile import get_pip_command +from piptools.pip import get_pip_command from piptools.repositories.pypi import PyPIRepository diff --git a/tests/test_top_level_editable.py b/tests/test_top_level_editable.py index a4157da26..3595a0da6 100644 --- a/tests/test_top_level_editable.py +++ b/tests/test_top_level_editable.py @@ -2,7 +2,7 @@ import pytest from piptools.repositories import PyPIRepository -from piptools.scripts.compile import get_pip_command +from piptools.pip import get_pip_command class MockedPyPIRepository(PyPIRepository):