60 lines
1.6 KiB
Python
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
|