')
for input, type in sorted(node.inputs):
extra = ''
if type:
extra = ' (%s)' % type
document.append('
%s%s' %
(input, input, extra))
document.append('
')
if node.outputs:
document.append('')
for output in sorted(node.outputs):
document.append('
%s' %
(output, output))
document.append('
')
return '\n'.join(document)
def ninja_dump(target):
proc = subprocess.Popen([sys.argv[1], '-t', 'query', target],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
return proc.communicate() + (proc.returncode,)
class RequestHandler(httpserver.BaseHTTPRequestHandler):
def do_GET(self):
assert self.path[0] == '/'
target = urllib2.unquote(self.path[1:])
if target == '':
self.send_response(302)
self.send_header('Location', '?' + sys.argv[2])
self.end_headers()
return
if not target.startswith('?'):
self.send_response(404)
self.end_headers()
return
target = target[1:]
ninja_output, ninja_error, exit_code = ninja_dump(target)
if exit_code == 0:
page_body = generate_html(parse(ninja_output.strip()))
else:
# Relay ninja's error message.
page_body = '