cpython/Lib/packaging/tests/pypi_test_server.py

60 lines
1.6 KiB
Python

"""Test PyPI Server implementation at testpypi.python.org, to use in tests.
This is a drop-in replacement for the mock pypi server for testing against a
real pypi server hosted by python.org especially for testing against.
"""
import unittest
PYPI_DEFAULT_STATIC_PATH = None
def use_xmlrpc_server(*server_args, **server_kwargs):
server_kwargs['serve_xmlrpc'] = True
return use_pypi_server(*server_args, **server_kwargs)
def use_http_server(*server_args, **server_kwargs):
server_kwargs['serve_xmlrpc'] = False
return use_pypi_server(*server_args, **server_kwargs)
def use_pypi_server(*server_args, **server_kwargs):
"""Decorator to make use of the PyPIServer for test methods,
just when needed, and not for the entire duration of the testcase.
"""
def wrapper(func):
def wrapped(*args, **kwargs):
server = PyPIServer(*server_args, **server_kwargs)
func(server=server, *args, **kwargs)
return wrapped
return wrapper
class PyPIServerTestCase(unittest.TestCase):
def setUp(self):
super(PyPIServerTestCase, self).setUp()
self.pypi = PyPIServer()
self.pypi.start()
self.addCleanup(self.pypi.stop)
class PyPIServer:
"""Shim to access testpypi.python.org, for testing a real server."""
def __init__(self, test_static_path=None,
static_filesystem_paths=["default"],
static_uri_paths=["simple"], serve_xmlrpc=False):
self.address = ('testpypi.python.org', '80')
def start(self):
pass
def stop(self):
pass
@property
def full_address(self):
return "http://%s:%s" % self.address