Ran idioms filter on code
[zeroinstall.git] / tests / server.py
bloba1f550026e04f88bdcd7199936bf7fd3d611d851
1 #!/usr/bin/env python
2 from __future__ import print_function
3 import os, sys, urlparse
4 import BaseHTTPServer
5 import traceback
7 next_step = None
9 class Give404:
10 def __init__(self, path):
11 self.path = path
13 def __str__(self):
14 return self.path
16 def __repr__(self):
17 return "404 on " + self.path
19 class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
20 def do_GET(self):
21 parsed = urlparse.urlparse(self.path)
23 leaf = os.path.basename(parsed.path)
25 acceptable = dict([(str(x), x) for x in next_step])
27 resp = acceptable.get(parsed.path, None) or \
28 acceptable.get(leaf, None) or \
29 acceptable.get('*', None)
31 # (don't use a symlink as they don't work on Windows)
32 if leaf == 'latest.xml':
33 leaf = 'Hello.xml'
35 if not resp:
36 self.send_error(404, "Expected %s; got %s" % (next_step, parsed.path))
37 elif parsed.path.startswith('/key-info/'):
38 self.send_response(200)
39 self.end_headers()
40 self.wfile.write('<key-lookup><item vote="good">Approved for testing</item></key-lookup>')
41 self.wfile.close()
42 elif os.path.exists(leaf) and not isinstance(resp, Give404):
43 self.send_response(200)
44 self.end_headers()
45 self.wfile.write(file(leaf).read())
46 self.wfile.close()
47 else:
48 self.send_error(404, "Missing: %s" % leaf)
50 def handle_requests(*script):
51 server_address = ('localhost', 8000)
52 httpd = BaseHTTPServer.HTTPServer(server_address, MyHandler)
53 child = os.fork()
54 if child:
55 return child
56 # We are the child
57 try:
58 sys.stderr = sys.stdout
59 #sys.stdout = sys.stderr
60 print("Waiting for request")
61 global next_step
62 for next_step in script:
63 if not isinstance(next_step, tuple): next_step = (next_step,)
64 for x in next_step:
65 httpd.handle_request()
66 print("Done")
67 os._exit(0)
68 except:
69 traceback.print_exc()
70 os._exit(1)