"""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