1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-14 16:33:45 -05:00
denoland-deno/tools/http_server.py

93 lines
2.6 KiB
Python
Raw Normal View History

2018-08-15 19:08:03 -04:00
#!/usr/bin/env python
2018-10-19 15:25:29 -04:00
# Copyright 2018 the Deno authors. All rights reserved. MIT license.
2018-08-15 19:08:03 -04:00
# Many tests expect there to be an http server on port 4545 servering the deno
# root directory.
import os
import sys
2018-08-15 19:08:03 -04:00
from threading import Thread
import SimpleHTTPServer
import SocketServer
from util import root_path
from time import sleep
PORT = 4545
2018-10-09 20:31:06 -04:00
REDIRECT_PORT = 4546
2018-08-15 19:08:03 -04:00
2018-10-21 22:14:27 -04:00
class ContentTypeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def guess_type(self, path):
if ".t1." in path:
return "text/typescript"
if ".t2." in path:
return "video/vnd.dlna.mpeg-tts"
if ".t3." in path:
return "video/mp2t"
if ".t4." in path:
return "application/x-typescript"
2018-10-21 22:14:27 -04:00
if ".j1." in path:
return "text/javascript"
if ".j2." in path:
return "application/ecmascript"
if ".j3." in path:
return "text/ecmascript"
if ".j4." in path:
return "application/x-javascript"
return SimpleHTTPServer.SimpleHTTPRequestHandler.guess_type(self, path)
def server():
2018-08-15 19:08:03 -04:00
os.chdir(root_path) # Hopefully the main thread doesn't also chdir.
2018-10-21 22:14:27 -04:00
Handler = ContentTypeHandler
Handler.extensions_map.update({
".ts": "application/typescript",
".js": "application/javascript",
".json": "application/json",
})
SocketServer.TCPServer.allow_reuse_address = True
s = SocketServer.TCPServer(("", PORT), Handler)
2018-08-15 19:08:03 -04:00
print "Deno test server http://localhost:%d/" % PORT
return s
2018-08-15 19:08:03 -04:00
2018-10-09 20:31:06 -04:00
def redirect_server():
os.chdir(root_path)
target_host = "http://localhost:%d" % PORT
class RedirectHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(301)
self.send_header('Location', target_host + self.path)
self.end_headers()
Handler = RedirectHandler
SocketServer.TCPServer.allow_reuse_address = True
s = SocketServer.TCPServer(("", REDIRECT_PORT), Handler)
print "Deno redirect server http://localhost:%d/ -> http://localhost:%d/" % (
REDIRECT_PORT, PORT)
return s
2018-08-15 19:08:03 -04:00
def spawn():
2018-10-09 20:31:06 -04:00
# Main http server
s = server()
thread = Thread(target=s.serve_forever)
2018-08-15 19:08:03 -04:00
thread.daemon = True
thread.start()
2018-10-09 20:31:06 -04:00
# Redirect server
rs = redirect_server()
r_thread = Thread(target=rs.serve_forever)
r_thread.daemon = True
r_thread.start()
2018-08-15 19:08:03 -04:00
sleep(1) # TODO I'm too lazy to figure out how to do this properly.
2018-10-19 22:15:29 -04:00
return thread
2018-08-15 19:08:03 -04:00
if __name__ == '__main__':
try:
2018-10-19 22:15:29 -04:00
thread = spawn()
while thread.is_alive():
sleep(10)
except KeyboardInterrupt:
2018-10-19 22:15:29 -04:00
pass
sys.exit(1)