Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Side by Side Diff: tools/md_browser/md_browser.py

Issue 2875633003: Default md_browser.py to listen just on localhost (Closed)
Patch Set: remove flag Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Simple Markdown browser for a Git checkout.""" 6 """Simple Markdown browser for a Git checkout."""
7 from __future__ import print_function 7 from __future__ import print_function
8 8
9 import SimpleHTTPServer 9 import SimpleHTTPServer
10 import SocketServer 10 import SocketServer
(...skipping 18 matching lines...) Expand all
29 def main(argv): 29 def main(argv):
30 parser = argparse.ArgumentParser(prog='md_browser') 30 parser = argparse.ArgumentParser(prog='md_browser')
31 parser.add_argument('-p', '--port', type=int, default=8080, 31 parser.add_argument('-p', '--port', type=int, default=8080,
32 help='port to run on (default = %(default)s)') 32 help='port to run on (default = %(default)s)')
33 parser.add_argument('-d', '--directory', type=str, default=SRC_DIR) 33 parser.add_argument('-d', '--directory', type=str, default=SRC_DIR)
34 parser.add_argument('file', nargs='?', 34 parser.add_argument('file', nargs='?',
35 help='open file in browser') 35 help='open file in browser')
36 args = parser.parse_args(argv) 36 args = parser.parse_args(argv)
37 37
38 top_level = os.path.realpath(args.directory) 38 top_level = os.path.realpath(args.directory)
39 server_address = ('localhost', args.port)
40 s = Server(server_address, top_level)
39 41
40 s = Server(args.port, top_level) 42 print('Listening on http://%s:%s/' % server_address)
41
42 print('Listening on http://localhost:%s/' % args.port)
43 thread = None 43 thread = None
44 if args.file: 44 if args.file:
45 path = os.path.realpath(args.file) 45 path = os.path.realpath(args.file)
46 if not path.startswith(top_level): 46 if not path.startswith(top_level):
47 print('%s is not under %s' % (args.file, args.directory)) 47 print('%s is not under %s' % (args.file, args.directory))
48 return 1 48 return 1
49 rpath = os.path.relpath(path, top_level) 49 rpath = os.path.relpath(path, top_level)
50 url = 'http://localhost:%d/%s' % (args.port, rpath) 50 url = 'http://localhost:%d/%s' % (args.port, rpath)
51 print('Opening %s' % url) 51 print('Opening %s' % url)
52 thread = threading.Thread(target=_open_url, args=(url,)) 52 thread = threading.Thread(target=_open_url, args=(url,))
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 # underscores, just like other non-ASCII characters. 99 # underscores, just like other non-ASCII characters.
100 100
101 value = value.encode('ascii', 'replace') # Non-ASCII turns into '?'. 101 value = value.encode('ascii', 'replace') # Non-ASCII turns into '?'.
102 value = re.sub(r'[^- a-zA-Z0-9]', '_', value) # Non-alphanumerics to '_'. 102 value = re.sub(r'[^- a-zA-Z0-9]', '_', value) # Non-alphanumerics to '_'.
103 value = value.replace(u' ', u'-') 103 value = value.replace(u' ', u'-')
104 value = re.sub(r'([-_])[-_]+', r'\1', value) # Fold hyphens and underscores. 104 value = re.sub(r'([-_])[-_]+', r'\1', value) # Fold hyphens and underscores.
105 return value 105 return value
106 106
107 107
108 class Server(SocketServer.TCPServer): 108 class Server(SocketServer.TCPServer):
109 def __init__(self, port, top_level): 109 def __init__(self, server_address, top_level):
110 SocketServer.TCPServer.__init__(self, ('0.0.0.0', port), Handler) 110 SocketServer.TCPServer.__init__(self, server_address, Handler)
111 self.port = port
112 self.top_level = top_level 111 self.top_level = top_level
113 self.retcode = None
114 112
115 def server_bind(self): 113 def server_bind(self):
116 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 114 self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
117 self.socket.bind(self.server_address) 115 self.socket.bind(self.server_address)
118 116
119 117
120 class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): 118 class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
121 def do_GET(self): 119 def do_GET(self):
122 path = self.path 120 path = self.path
123 121
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 contents.text = 'Contents' 338 contents.text = 'Contents'
341 contents.tail = '\n' 339 contents.tail = '\n'
342 toc_aux = ElementTree.SubElement(toc_node, 'div', {'class': 'toc-aux'}) 340 toc_aux = ElementTree.SubElement(toc_node, 'div', {'class': 'toc-aux'})
343 toc_aux.text = '\n' 341 toc_aux.text = '\n'
344 toc_aux.append(ul_with_the_desired_toc_entries) 342 toc_aux.append(ul_with_the_desired_toc_entries)
345 toc_aux.tail = '\n' 343 toc_aux.tail = '\n'
346 344
347 345
348 if __name__ == '__main__': 346 if __name__ == '__main__':
349 sys.exit(main(sys.argv[1:])) 347 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698