Skip to content

Instantly share code, notes, and snippets.

@nkmathew
Created August 31, 2015 18:54
Show Gist options
  • Save nkmathew/a405d6a3117268a15dd7 to your computer and use it in GitHub Desktop.
Save nkmathew/a405d6a3117268a15dd7 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
"""
Runs a simple HTTP Server locally on port 80
Created to handle mime types not handled in http.server
Usage:
python -m MyServer
"""
import time
import sys
from http.server import SimpleHTTPRequestHandler
from http.server import HTTPServer
MIME_TYPES = {
'.json': 'application/json'
}
def describe_time(elapsed):
elapsed = int(elapsed)
hours = elapsed // 3600
elapsed = elapsed - hours * 3600
t = (hours, elapsed // 60, elapsed % 60)
print('')
if t[0]:
print('Server Uptime: {0} Hours {1} Minute(s) {2} seconds'.format(
t[0], t[1], t[2]))
elif t[1]:
print('Server Uptime: {0} Minute(s) {1} seconds'.format(t[1], t[2]))
else:
print('Server uptime: {0} seconds'.format(t[2]))
class MyHandler(SimpleHTTPRequestHandler):
def log_request(self, code='-', size='-'):
"""Overrides the one from the super class.
It simply reorders arguments to log_message. The return code looks better
when it comes first as it's more aligned(petty stuff)
"""
self.log_message('%s %s "%s"', str(code), str(size), self.requestline)
def serve():
MyHandler.extensions_map.update(MIME_TYPES)
server = HTTPServer(('localhost', 80), MyHandler)
sockname = server.socket.getsockname()
print('Serving HTTP on {0} port {1}...'.format(sockname[0], sockname[1]))
start = time.time()
try:
server.serve_forever()
except KeyboardInterrupt:
print('\nKeyboard interrupt received, exiting...')
server.server_close()
describe_time(time.time() - start)
time.sleep(1)
sys.exit(0)
if __name__ == '__main__':
serve()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment