From 8e170c5881d78ae9b46149a7e32bab28749dec40 Mon Sep 17 00:00:00 2001
From: neodarz <neodarz@neodarz.net>
Date: Sun, 26 May 2019 18:02:19 +0200
Subject: Move HTTPServerProcess to external file

---
 utils/utils.py | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

(limited to 'utils')

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()
-- 
cgit v1.2.1