Skip to content

Instantly share code, notes, and snippets.

@bcoughlan
Last active December 20, 2015 23:48
Show Gist options
  • Save bcoughlan/6214769 to your computer and use it in GitHub Desktop.
Save bcoughlan/6214769 to your computer and use it in GitHub Desktop.
Python HTTP file server for writing tests that retrieve files
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()
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