| 2387 | self.callback(self) |
| 2388 | |
| 2389 | class ServerThread(threading.Thread): |
| 2390 | |
| 2391 | def __init__(self, urlhandler, host, port): |
| 2392 | self.urlhandler = urlhandler |
| 2393 | self.host = host |
| 2394 | self.port = int(port) |
| 2395 | threading.Thread.__init__(self) |
| 2396 | self.serving = False |
| 2397 | self.error = None |
| 2398 | self.docserver = None |
| 2399 | |
| 2400 | def run(self): |
| 2401 | """Start the server.""" |
| 2402 | try: |
| 2403 | DocServer.base = http.server.HTTPServer |
| 2404 | DocServer.handler = DocHandler |
| 2405 | DocHandler.MessageClass = email.message.Message |
| 2406 | DocHandler.urlhandler = staticmethod(self.urlhandler) |
| 2407 | docsvr = DocServer(self.host, self.port, self.ready) |
| 2408 | self.docserver = docsvr |
| 2409 | docsvr.serve_until_quit() |
| 2410 | except Exception as err: |
| 2411 | self.error = err |
| 2412 | |
| 2413 | def ready(self, server): |
| 2414 | self.serving = True |
| 2415 | self.host = server.host |
| 2416 | self.port = server.server_port |
| 2417 | self.url = 'http://%s:%d/' % (self.host, self.port) |
| 2418 | |
| 2419 | def stop(self): |
| 2420 | """Stop the server and this thread nicely""" |
| 2421 | self.docserver.quit = True |
| 2422 | self.join() |
| 2423 | # explicitly break a reference cycle: DocServer.callback |
| 2424 | # has indirectly a reference to ServerThread. |
| 2425 | self.docserver = None |
| 2426 | self.serving = False |
| 2427 | self.url = None |
| 2428 | |
| 2429 | thread = ServerThread(urlhandler, hostname, port) |
| 2430 | thread.start() |
no outgoing calls
no test coverage detected
searching dependent graphs…