aboutsummaryrefslogtreecommitdiff
path: root/utils/utils.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--utils/utils.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/utils/utils.py b/utils/utils.py
index db4bab57..1fdea5d9 100644
--- a/utils/utils.py
+++ b/utils/utils.py
@@ -14,6 +14,10 @@ import re
import lxml.etree as ET
+import http.server
+import multiprocessing
+import os
+import sys
@contextmanager
def init_colorama():
@@ -215,3 +219,41 @@ def sanitize(string):
string = re.sub(r"\s+", "-", string)
# percent encode the result
return urllib.parse.quote(string)
+
+
+class HTTPServerProcess(multiprocessing.Process):
+ """This class can be used to run an HTTP server."""
+
+ def __init__(self, rootdir):
+ """Initialize the HTTPServerProcess class.
+
+ Parameters
+ ----------
+ rootdir : str
+ The root directory to serve from.
+
+ """
+
+ super().__init__()
+ self.rootdir = rootdir
+
+ def run(self):
+ """Create an HTTP server and serve forever.
+
+ Runs on localhost. The default port is 8000; if it is not
+ available, a random port is used instead.
+ """
+
+ os.chdir(self.rootdir)
+ # pylint: disable=invalid-name
+ HandlerClass = http.server.SimpleHTTPRequestHandler
+ try:
+ httpd = http.server.HTTPServer(("", 8001), HandlerClass)
+ except OSError:
+ httpd = http.server.HTTPServer(("", 0), HandlerClass)
+ _, portnumber = httpd.socket.getsockname()
+ sys.stderr.write("server serving on http://localhost:%d\n" % portnumber)
+ try:
+ httpd.serve_forever()
+ except KeyboardInterrupt:
+ httpd.shutdown()