annotate Tools/scripts/serve.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents fdf907708f49
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 59478
diff changeset
1 #!/usr/bin/env python3
59478
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
2 '''
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
3 Small wsgiref based web server. Takes a path to serve from and an
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
4 optional port number (defaults to 8000), then tries to serve files.
80928
fdf907708f49 Issue #16714: use 'raise' exceptions, don't 'throw'.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 63688
diff changeset
5 Mime types are guessed from the file names, 404 errors are raised
59478
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
6 if the file is not found. Used for the make serve target in Doc.
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
7 '''
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
8 import sys
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
9 import os
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
10 import mimetypes
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
11 from wsgiref import simple_server, util
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
12
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
13 def app(environ, respond):
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
14
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
15 fn = os.path.join(path, environ['PATH_INFO'][1:])
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
16 if '.' not in fn.split(os.path.sep)[-1]:
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
17 fn = os.path.join(fn, 'index.html')
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
18 type = mimetypes.guess_type(fn)[0]
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
19
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
20 if os.path.exists(fn):
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
21 respond('200 OK', [('Content-Type', type)])
63688
71c4315d49f2 Issue #8867: Fix `Tools/scripts/serve.py` to work with files containing
Antoine Pitrou <solipsis@pitrou.net>
parents: 62005
diff changeset
22 return util.FileWrapper(open(fn, "rb"))
59478
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
23 else:
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
24 respond('404 Not Found', [('Content-Type', 'text/plain')])
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
25 return ['not found']
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
26
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
27 if __name__ == '__main__':
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
28 path = sys.argv[1]
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
29 port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000
c870396b6ae1 Merged revisions 78416,78430 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
diff changeset
30 httpd = simple_server.make_server('', port, app)
62005
714653dd4aad Merged revisions 81587 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61305
diff changeset
31 print("Serving {} on port {}, control-C to stop".format(path, port))
714653dd4aad Merged revisions 81587 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61305
diff changeset
32 try:
714653dd4aad Merged revisions 81587 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61305
diff changeset
33 httpd.serve_forever()
714653dd4aad Merged revisions 81587 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61305
diff changeset
34 except KeyboardInterrupt:
714653dd4aad Merged revisions 81587 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 61305
diff changeset
35 print("\b\bShutting down.")