Last active
December 20, 2015 23:48
-
-
Save bcoughlan/6214769 to your computer and use it in GitHub Desktop.
Python HTTP file server for writing tests that retrieve files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from SimpleHTTPServer import SimpleHTTPRequestHandler | |
import BaseHTTPServer | |
import httplib | |
import threading | |
from os.path import join, abspath | |
class RequestHandler(SimpleHTTPRequestHandler): | |
def do_QUIT (self): | |
self.send_response(200) | |
self.end_headers() | |
self.server.stop = True | |
def translate_path(self, path): | |
return NotImplementedError() | |
class StoppableServer(BaseHTTPServer.HTTPServer): | |
def serve_forever (self): | |
self.stop = False | |
while not self.stop: | |
self.handle_request() | |
def _make_handler(root): | |
class MyRequestHandler(RequestHandler): | |
def translate_path(self, path): | |
startdir = abspath(root) | |
path = [d for d in path.split('/') if d != '..'] | |
return join(startdir, *path) | |
return MyRequestHandler | |
class Server(): | |
def __init__(self, port, root): | |
self.port = port | |
self.handler_class = _make_handler(root) | |
def start(self): | |
self.httpd = StoppableServer(('', self.port), self.handler_class) | |
t = threading.Thread(target=self.httpd.serve_forever) | |
t.setDaemon(True) | |
t.start() | |
print 'Started SimpleHTTPServer on port', self.port | |
def stop(self): | |
conn = httplib.HTTPConnection('localhost:%d' % self.port) | |
conn.request('QUIT', '/') | |
conn.getresponse() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import HTTPFileServer | |
server = HTTPFileServer.Server(8080, '/myproject/test/files') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment