blob: 7d12331453a6684b893b82eaab2af8f87530b54b [file] [log] [blame]
Patrick Williamsc0f7c042017-02-23 20:41:17 -06001import http.server
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002import multiprocessing
3import os
Patrick Williamsc0f7c042017-02-23 20:41:17 -06004from socketserver import ThreadingMixIn
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005
Patrick Williamsc0f7c042017-02-23 20:41:17 -06006class HTTPServer(ThreadingMixIn, http.server.HTTPServer):
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007
8 def server_start(self, root_dir):
9 import signal
10 signal.signal(signal.SIGTERM, signal.SIG_DFL)
11 os.chdir(root_dir)
12 self.serve_forever()
13
Patrick Williamsc0f7c042017-02-23 20:41:17 -060014class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
Patrick Williamsc124f4f2015-09-15 14:41:29 -050015
16 def log_message(self, format_str, *args):
17 pass
18
19class HTTPService(object):
20
21 def __init__(self, root_dir, host=''):
22 self.root_dir = root_dir
23 self.host = host
24 self.port = 0
25
26 def start(self):
27 self.server = HTTPServer((self.host, self.port), HTTPRequestHandler)
28 if self.port == 0:
29 self.port = self.server.server_port
30 self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir])
31 self.process.start()
32
33 def stop(self):
34 self.server.server_close()
35 self.process.terminate()
36 self.process.join()