comparison venv/lib/python2.7/site-packages/setuptools/tests/server.py @ 0:d67268158946 draft

planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author bcclaywell
date Mon, 12 Oct 2015 17:43:33 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d67268158946
1 """Basic http server for tests to simulate PyPI or custom indexes
2 """
3
4 import time
5 import threading
6 from setuptools.compat import BaseHTTPRequestHandler
7 from setuptools.compat import HTTPServer, SimpleHTTPRequestHandler
8
9 class IndexServer(HTTPServer):
10 """Basic single-threaded http server simulating a package index
11
12 You can use this server in unittest like this::
13 s = IndexServer()
14 s.start()
15 index_url = s.base_url() + 'mytestindex'
16 # do some test requests to the index
17 # The index files should be located in setuptools/tests/indexes
18 s.stop()
19 """
20 def __init__(self, server_address=('', 0),
21 RequestHandlerClass=SimpleHTTPRequestHandler):
22 HTTPServer.__init__(self, server_address, RequestHandlerClass)
23 self._run = True
24
25 def start(self):
26 self.thread = threading.Thread(target=self.serve_forever)
27 self.thread.start()
28
29 def stop(self):
30 "Stop the server"
31
32 # Let the server finish the last request and wait for a new one.
33 time.sleep(0.1)
34
35 self.shutdown()
36 self.thread.join()
37 self.socket.close()
38
39 def base_url(self):
40 port = self.server_port
41 return 'http://127.0.0.1:%s/setuptools/tests/indexes/' % port
42
43 class RequestRecorder(BaseHTTPRequestHandler):
44 def do_GET(self):
45 requests = vars(self.server).setdefault('requests', [])
46 requests.append(self)
47 self.send_response(200, 'OK')
48
49 class MockServer(HTTPServer, threading.Thread):
50 """
51 A simple HTTP Server that records the requests made to it.
52 """
53 def __init__(self, server_address=('', 0),
54 RequestHandlerClass=RequestRecorder):
55 HTTPServer.__init__(self, server_address, RequestHandlerClass)
56 threading.Thread.__init__(self)
57 self.setDaemon(True)
58 self.requests = []
59
60 def run(self):
61 self.serve_forever()
62
63 @property
64 def url(self):
65 return 'http://localhost:%(server_port)s/' % vars(self)