3 from __future__
import print_function
5 import os
, sys
, urlparse
12 def __init__(self
, path
):
19 return "404 on " + self
.path
21 class MyHandler(BaseHTTPServer
.BaseHTTPRequestHandler
):
23 parsed
= urlparse
.urlparse(self
.path
)
26 if parsed
.path
.startswith('/redirect/'):
27 self
.send_response(302)
28 self
.wfile
.write('Location: /' + parsed
.path
[1:].split('/', 1)[1])
31 leaf
= os
.path
.basename(parsed
.path
)
33 acceptable
= dict([(str(x
), x
) for x
in next_step
])
35 resp
= acceptable
.get(parsed
.path
, None) or \
36 acceptable
.get(leaf
, None) or \
37 acceptable
.get('*', None)
39 # (don't use a symlink as they don't work on Windows)
40 if leaf
== 'latest.xml':
44 self
.send_error(404, "Expected %s; got %s" % (next_step
, parsed
.path
))
45 elif parsed
.path
.startswith('/key-info/'):
46 self
.send_response(200)
48 self
.wfile
.write('<key-lookup><item vote="good">Approved for testing</item></key-lookup>')
50 elif os
.path
.exists(leaf
) and not isinstance(resp
, Give404
):
51 self
.send_response(200)
53 self
.wfile
.write(open(leaf
).read())
56 self
.send_error(404, "Missing: %s" % leaf
)
58 def handle_requests(*script
):
59 server_address
= ('localhost', 8000)
60 httpd
= BaseHTTPServer
.HTTPServer(server_address
, MyHandler
)
66 sys
.stderr
= sys
.stdout
67 #sys.stdout = sys.stderr
68 print("Waiting for request")
70 for next_step
in script
:
71 if type(next_step
) != tuple: next_step
= (next_step
,)
73 httpd
.handle_request()