mirror of https://github.com/pypa/pip
Move PipXmlrpcTransport from pip._internal.download to pip._internal.network.xmlrpc
This commit is contained in:
parent
828cbba70f
commit
cf5ce5f16f
|
@ -0,0 +1,2 @@
|
||||||
|
Move PipXmlrpcTransport from pip._internal.download to pip._internal.network.xmlrpc
|
||||||
|
and move associated tests to tests.unit.test_network_xmlrpc
|
|
@ -14,7 +14,7 @@ from pip._vendor.six.moves import xmlrpc_client # type: ignore
|
||||||
from pip._internal.cli.base_command import Command
|
from pip._internal.cli.base_command import Command
|
||||||
from pip._internal.cli.req_command import SessionCommandMixin
|
from pip._internal.cli.req_command import SessionCommandMixin
|
||||||
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
||||||
from pip._internal.download import PipXmlrpcTransport
|
from pip._internal.network.xmlrpc import PipXmlrpcTransport
|
||||||
from pip._internal.exceptions import CommandError
|
from pip._internal.exceptions import CommandError
|
||||||
from pip._internal.models.index import PyPI
|
from pip._internal.models.index import PyPI
|
||||||
from pip._internal.utils.compat import get_terminal_size
|
from pip._internal.utils.compat import get_terminal_size
|
||||||
|
|
|
@ -19,7 +19,6 @@ from pip._vendor.requests.structures import CaseInsensitiveDict
|
||||||
from pip._vendor.six import PY2
|
from pip._vendor.six import PY2
|
||||||
# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is
|
# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is
|
||||||
# why we ignore the type on this import
|
# why we ignore the type on this import
|
||||||
from pip._vendor.six.moves import xmlrpc_client # type: ignore
|
|
||||||
from pip._vendor.six.moves.urllib import parse as urllib_parse
|
from pip._vendor.six.moves.urllib import parse as urllib_parse
|
||||||
|
|
||||||
import pip
|
import pip
|
||||||
|
@ -804,35 +803,6 @@ def unpack_file_url(
|
||||||
_copy_file(from_path, download_dir, link)
|
_copy_file(from_path, download_dir, link)
|
||||||
|
|
||||||
|
|
||||||
class PipXmlrpcTransport(xmlrpc_client.Transport):
|
|
||||||
"""Provide a `xmlrpclib.Transport` implementation via a `PipSession`
|
|
||||||
object.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, index_url, session, use_datetime=False):
|
|
||||||
xmlrpc_client.Transport.__init__(self, use_datetime)
|
|
||||||
index_parts = urllib_parse.urlparse(index_url)
|
|
||||||
self._scheme = index_parts.scheme
|
|
||||||
self._session = session
|
|
||||||
|
|
||||||
def request(self, host, handler, request_body, verbose=False):
|
|
||||||
parts = (self._scheme, host, handler, None, None, None)
|
|
||||||
url = urllib_parse.urlunparse(parts)
|
|
||||||
try:
|
|
||||||
headers = {'Content-Type': 'text/xml'}
|
|
||||||
response = self._session.post(url, data=request_body,
|
|
||||||
headers=headers, stream=True)
|
|
||||||
response.raise_for_status()
|
|
||||||
self.verbose = verbose
|
|
||||||
return self.parse_response(response.raw)
|
|
||||||
except requests.HTTPError as exc:
|
|
||||||
logger.critical(
|
|
||||||
"HTTP error %s while getting %s",
|
|
||||||
exc.response.status_code, url,
|
|
||||||
)
|
|
||||||
raise
|
|
||||||
|
|
||||||
|
|
||||||
def unpack_url(
|
def unpack_url(
|
||||||
link, # type: Link
|
link, # type: Link
|
||||||
location, # type: str
|
location, # type: str
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from pip._vendor import requests
|
||||||
|
from pip._vendor.six.moves import xmlrpc_client # type: ignore
|
||||||
|
from pip._vendor.six.moves.urllib import parse as urllib_parse
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class PipXmlrpcTransport(xmlrpc_client.Transport):
|
||||||
|
"""Provide a `xmlrpclib.Transport` implementation via a `PipSession`
|
||||||
|
object.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, index_url, session, use_datetime=False):
|
||||||
|
xmlrpc_client.Transport.__init__(self, use_datetime)
|
||||||
|
index_parts = urllib_parse.urlparse(index_url)
|
||||||
|
self._scheme = index_parts.scheme
|
||||||
|
self._session = session
|
||||||
|
|
||||||
|
def request(self, host, handler, request_body, verbose=False):
|
||||||
|
parts = (self._scheme, host, handler, None, None, None)
|
||||||
|
url = urllib_parse.urlunparse(parts)
|
||||||
|
try:
|
||||||
|
headers = {'Content-Type': 'text/xml'}
|
||||||
|
response = self._session.post(url, data=request_body,
|
||||||
|
headers=headers, stream=True)
|
||||||
|
response.raise_for_status()
|
||||||
|
self.verbose = verbose
|
||||||
|
return self.parse_response(response.raw)
|
||||||
|
except requests.HTTPError as exc:
|
||||||
|
logger.critical(
|
||||||
|
"HTTP error %s while getting %s",
|
||||||
|
exc.response.status_code, url,
|
||||||
|
)
|
||||||
|
raise
|
|
@ -4,7 +4,6 @@ import pretend
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
||||||
from pip._internal.commands import create_command
|
|
||||||
from pip._internal.commands.search import (
|
from pip._internal.commands.search import (
|
||||||
highest_version,
|
highest_version,
|
||||||
print_results,
|
print_results,
|
||||||
|
@ -106,32 +105,6 @@ def test_search_missing_argument(script):
|
||||||
assert 'ERROR: Missing required argument (search query).' in result.stderr
|
assert 'ERROR: Missing required argument (search query).' in result.stderr
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.network
|
|
||||||
def test_run_method_should_return_success_when_find_packages():
|
|
||||||
"""
|
|
||||||
Test SearchCommand.run for found package
|
|
||||||
"""
|
|
||||||
command = create_command('search')
|
|
||||||
cmdline = "--index=https://pypi.org/pypi pip"
|
|
||||||
with command.main_context():
|
|
||||||
options, args = command.parse_args(cmdline.split())
|
|
||||||
status = command.run(options, args)
|
|
||||||
assert status == SUCCESS
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.network
|
|
||||||
def test_run_method_should_return_no_matches_found_when_does_not_find_pkgs():
|
|
||||||
"""
|
|
||||||
Test SearchCommand.run for no matches
|
|
||||||
"""
|
|
||||||
command = create_command('search')
|
|
||||||
cmdline = "--index=https://pypi.org/pypi nonexistentpackage"
|
|
||||||
with command.main_context():
|
|
||||||
options, args = command.parse_args(cmdline.split())
|
|
||||||
status = command.run(options, args)
|
|
||||||
assert status == NO_MATCHES_FOUND
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.network
|
@pytest.mark.network
|
||||||
def test_search_should_exit_status_code_zero_when_find_packages(script):
|
def test_search_should_exit_status_code_zero_when_find_packages(script):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
||||||
|
from pip._internal.commands import create_command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.network
|
||||||
|
def test_run_method_should_return_success_when_find_packages():
|
||||||
|
"""
|
||||||
|
Test SearchCommand.run for found package
|
||||||
|
"""
|
||||||
|
command = create_command('search')
|
||||||
|
cmdline = "--index=https://pypi.org/pypi pip"
|
||||||
|
with command.main_context():
|
||||||
|
options, args = command.parse_args(cmdline.split())
|
||||||
|
status = command.run(options, args)
|
||||||
|
assert status == SUCCESS
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.network
|
||||||
|
def test_run_method_should_return_no_matches_found_when_does_not_find_pkgs():
|
||||||
|
"""
|
||||||
|
Test SearchCommand.run for no matches
|
||||||
|
"""
|
||||||
|
command = create_command('search')
|
||||||
|
cmdline = "--index=https://pypi.org/pypi nonexistentpackage"
|
||||||
|
with command.main_context():
|
||||||
|
options, args = command.parse_args(cmdline.split())
|
||||||
|
status = command.run(options, args)
|
||||||
|
assert status == NO_MATCHES_FOUND
|
Loading…
Reference in New Issue