Skip to content

bpo-36345: Add a new example in the documentation of wsgiref #12511

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 25, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions Doc/library/wsgiref.rst
Original file line number Diff line number Diff line change
@@ -781,3 +781,35 @@ This is a working "Hello World" WSGI application::

# Serve until process is killed
httpd.serve_forever()


Example of a small wsgiref-based web server::

# Takes a path to serve from and an optional port number (defaults to 8000),
# then tries to serve files. Mime types are guessed from the file names, 404
# errors are raised if the file is not found.
import sys
import os
import mimetypes
from wsgiref import simple_server, util

def app(environ, respond):
fn = os.path.join(path, environ['PATH_INFO'][1:])
if '.' not in fn.split(os.path.sep)[-1]:
fn = os.path.join(fn, 'index.html')
type = mimetypes.guess_type(fn)[0]

if os.path.exists(fn):
respond('200 OK', [('Content-Type', type)])
return util.FileWrapper(open(fn, "rb"))
else:
respond('404 Not Found', [('Content-Type', 'text/plain')])
return [b'not found']

path = sys.argv[1]
port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000
with simple_server.make_server('', port, app) as httpd:
print("Serving {} on port {}, control-C to stop".format(path, port))

# Serve until process is killed
httpd.serve_forever()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Using the code of the ``Tools/scripts/serve.py`` script as an example in the
:mod:`wsgiref` documentation. Contributed by Stéphane Wirtel.