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.req_command import SessionCommandMixin
|
||||
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.models.index import PyPI
|
||||
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
|
||||
# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is
|
||||
# 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
|
||||
|
||||
import pip
|
||||
|
@ -804,35 +803,6 @@ def unpack_file_url(
|
|||
_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(
|
||||
link, # type: Link
|
||||
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
|
||||
|
||||
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
|
||||
from pip._internal.commands import create_command
|
||||
from pip._internal.commands.search import (
|
||||
highest_version,
|
||||
print_results,
|
||||
|
@ -106,32 +105,6 @@ def test_search_missing_argument(script):
|
|||
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
|
||||
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