MCPcopy
hub / github.com/psf/requests / Server

Class Server

tests/testserver/server.py:25–135  ·  view source on GitHub ↗

Dummy server using for unit testing

Source from the content-addressed store, hash-verified

23
24
25class Server(threading.Thread):
26 """Dummy server using for unit testing"""
27
28 WAIT_EVENT_TIMEOUT = 5
29
30 def __init__(
31 self,
32 handler=None,
33 host="localhost",
34 port=0,
35 requests_to_handle=1,
36 wait_to_close_event=None,
37 ):
38 super().__init__()
39
40 self.handler = handler or consume_socket_content
41 self.handler_results = []
42
43 self.host = host
44 self.port = port
45 self.requests_to_handle = requests_to_handle
46
47 self.wait_to_close_event = wait_to_close_event
48 self.ready_event = threading.Event()
49 self.stop_event = threading.Event()
50
51 @classmethod
52 def text_response_server(cls, text, request_timeout=0.5, **kwargs):
53 def text_response_handler(sock):
54 request_content = consume_socket_content(sock, timeout=request_timeout)
55 sock.send(text.encode("utf-8"))
56
57 return request_content
58
59 return Server(text_response_handler, **kwargs)
60
61 @classmethod
62 def basic_response_server(cls, **kwargs):
63 return cls.text_response_server(
64 "HTTP/1.1 200 OK\r\n" + "Content-Length: 0\r\n\r\n", **kwargs
65 )
66
67 def run(self):
68 try:
69 self.server_sock = self._create_socket_and_bind()
70 # in case self.port = 0
71 self.port = self.server_sock.getsockname()[1]
72 self.ready_event.set()
73 self._handle_requests()
74
75 if self.wait_to_close_event:
76 self.wait_to_close_event.wait(self.WAIT_EVENT_TIMEOUT)
77 finally:
78 self.ready_event.set() # just in case of exception
79 self._close_server_sock_ignore_errors()
80 self.stop_event.set()
81
82 def _create_socket_and_bind(self):

Calls

no outgoing calls