]> granicus.if.org Git - python/commitdiff
Update docs (and sample app in wsgiref.simple_server) to reflect PEP 3333.
authorPhillip J. Eby <pje@telecommunity.com>
Wed, 3 Nov 2010 00:46:45 +0000 (00:46 +0000)
committerPhillip J. Eby <pje@telecommunity.com>
Wed, 3 Nov 2010 00:46:45 +0000 (00:46 +0000)
Doc/library/wsgiref.rst
Lib/wsgiref/simple_server.py
Misc/NEWS

index fda9e70e5c9921ecb68a76828dd8b90ea0997043..ceacbacdeaadc030fcc5dcd42d3db5fe51cdeef6 100644 (file)
@@ -22,7 +22,7 @@ be used to add WSGI support to a web server or framework.  It provides utilities
 for manipulating WSGI environment variables and response headers, base classes
 for implementing WSGI servers, a demo HTTP server that serves WSGI applications,
 and a validation tool that checks WSGI servers and applications for conformance
-to the WSGI specification (:pep:`333`).
+to the WSGI specification (:pep:`3333`).
 
 See http://www.wsgi.org for more information about WSGI, and links to tutorials
 and other resources.
@@ -39,9 +39,9 @@ and other resources.
 
 This module provides a variety of utility functions for working with WSGI
 environments.  A WSGI environment is a dictionary containing HTTP request
-variables as described in :pep:`333`.  All of the functions taking an *environ*
+variables as described in :pep:`3333`.  All of the functions taking an *environ*
 parameter expect a WSGI-compliant dictionary to be supplied; please see
-:pep:`333` for a detailed specification.
+:pep:`3333` for a detailed specification.
 
 
 .. function:: guess_scheme(environ)
@@ -60,7 +60,7 @@ parameter expect a WSGI-compliant dictionary to be supplied; please see
 .. function:: request_uri(environ, include_query=True)
 
    Return the full request URI, optionally including the query string, using the
-   algorithm found in the "URL Reconstruction" section of :pep:`333`.  If
+   algorithm found in the "URL Reconstruction" section of :pep:`3333`.  If
    *include_query* is false, the query string is not included in the resulting URI.
 
 
@@ -104,7 +104,7 @@ parameter expect a WSGI-compliant dictionary to be supplied; please see
 
    This routine adds various parameters required for WSGI, including ``HTTP_HOST``,
    ``SERVER_NAME``, ``SERVER_PORT``, ``REQUEST_METHOD``, ``SCRIPT_NAME``,
-   ``PATH_INFO``, and all of the :pep:`333`\ -defined ``wsgi.*`` variables.  It
+   ``PATH_INFO``, and all of the :pep:`3333`\ -defined ``wsgi.*`` variables.  It
    only supplies default values, and does not replace any existing settings for
    these variables.
 
@@ -152,8 +152,8 @@ also provides these miscellaneous utilities:
    support both :meth:`__getitem__` and :meth:`__iter__` iteration styles, for
    compatibility with Python 2.1 and Jython. As the object is iterated over, the
    optional *blksize* parameter will be repeatedly passed to the *filelike*
-   object's :meth:`read` method to obtain strings to yield.  When :meth:`read`
-   returns an empty string, iteration is ended and is not resumable.
+   object's :meth:`read` method to obtain bytestrings to yield.  When :meth:`read`
+   returns an empty bytestring, iteration is ended and is not resumable.
 
    If *filelike* has a :meth:`close` method, the returned object will also have a
    :meth:`close` method, and it will invoke the *filelike* object's :meth:`close`
@@ -187,7 +187,7 @@ manipulation of WSGI response headers using a mapping-like interface.
 .. class:: Headers(headers)
 
    Create a mapping-like object wrapping *headers*, which must be a list of header
-   name/value tuples as described in :pep:`333`.
+   name/value tuples as described in :pep:`3333`.
 
    :class:`Headers` objects support typical mapping operations including
    :meth:`__getitem__`, :meth:`get`, :meth:`__setitem__`, :meth:`setdefault`,
@@ -210,11 +210,11 @@ manipulation of WSGI response headers using a mapping-like interface.
    :meth:`items`, which is the same as the length of the wrapped header list.  In
    fact, the :meth:`items` method just returns a copy of the wrapped header list.
 
-   Calling ``str()`` on a :class:`Headers` object returns a formatted string
+   Calling ``bytes()`` on a :class:`Headers` object returns a formatted bytestring
    suitable for transmission as HTTP response headers.  Each header is placed on a
    line with its value, separated by a colon and a space. Each line is terminated
-   by a carriage return and line feed, and the string is terminated with a blank
-   line.
+   by a carriage return and line feed, and the bytestring is terminated with a
+   blank line.
 
    In addition to their mapping interface and formatting features, :class:`Headers`
    objects also have the following methods for querying and adding multi-valued
@@ -272,7 +272,7 @@ request.  (E.g., using the :func:`shift_path_info` function from
    Create a new WSGI server listening on *host* and *port*, accepting connections
    for *app*.  The return value is an instance of the supplied *server_class*, and
    will process requests using the specified *handler_class*.  *app* must be a WSGI
-   application object, as defined by :pep:`333`.
+   application object, as defined by :pep:`3333`.
 
    Example usage::
 
@@ -346,7 +346,7 @@ request.  (E.g., using the :func:`shift_path_info` function from
       :attr:`base_environ` dictionary attribute and then adds various headers derived
       from the HTTP request.  Each call to this method should return a new dictionary
       containing all of the relevant CGI environment variables as specified in
-      :pep:`333`.
+      :pep:`3333`.
 
 
    .. method:: WSGIRequestHandler.get_stderr()
@@ -376,7 +376,7 @@ application objects that validate communications between a WSGI server or
 gateway and a WSGI application object, to check both sides for protocol
 conformance.
 
-Note that this utility does not guarantee complete :pep:`333` compliance; an
+Note that this utility does not guarantee complete :pep:`3333` compliance; an
 absence of errors from this module does not necessarily mean that errors do not
 exist.  However, if this module does produce an error, then it is virtually
 certain that either the server or application is not 100% compliant.
@@ -401,7 +401,7 @@ Paste" library.
 
    This wrapper may also generate output using the :mod:`warnings` module to
    indicate behaviors that are questionable but which may not actually be
-   prohibited by :pep:`333`.  Unless they are suppressed using Python command-line
+   prohibited by :pep:`3333`.  Unless they are suppressed using Python command-line
    options or the :mod:`warnings` API, any such warnings will be written to
    ``sys.stderr`` (*not* ``wsgi.errors``, unless they happen to be the same
    object).
@@ -626,7 +626,7 @@ input, output, and error streams.
 
       This method can access the current error information using ``sys.exc_info()``,
       and should pass that information to *start_response* when calling it (as
-      described in the "Error Handling" section of :pep:`333`).
+      described in the "Error Handling" section of :pep:`3333`).
 
       The default implementation just uses the :attr:`error_status`,
       :attr:`error_headers`, and :attr:`error_body` attributes to generate an output
@@ -641,23 +641,23 @@ input, output, and error streams.
    .. attribute:: BaseHandler.error_status
 
       The HTTP status used for error responses.  This should be a status string as
-      defined in :pep:`333`; it defaults to a 500 code and message.
+      defined in :pep:`3333`; it defaults to a 500 code and message.
 
 
    .. attribute:: BaseHandler.error_headers
 
       The HTTP headers used for error responses.  This should be a list of WSGI
-      response headers (``(name, value)`` tuples), as described in :pep:`333`.  The
+      response headers (``(name, value)`` tuples), as described in :pep:`3333`.  The
       default list just sets the content type to ``text/plain``.
 
 
    .. attribute:: BaseHandler.error_body
 
-      The error response body.  This should be an HTTP response body string. It
+      The error response body.  This should be an HTTP response body bytestring. It
       defaults to the plain text, "A server error occurred.  Please contact the
       administrator."
 
-   Methods and attributes for :pep:`333`'s "Optional Platform-Specific File
+   Methods and attributes for :pep:`3333`'s "Optional Platform-Specific File
    Handling" feature:
 
 
index 231dc572f6219303f7467f019ea1c59a92be6fb8..550f4d86a92f2b209ccd827e1b3fdd5e3e777f76 100644 (file)
@@ -1,4 +1,4 @@
-"""BaseHTTPServer that implements the Python WSGI protocol (PEP 333, rev 1.21)
+"""BaseHTTPServer that implements the Python WSGI protocol (PEP 3333)
 
 This is both an example of how WSGI can be implemented, and a basis for running
 simple web applications on a local machine, such as might be done when testing
@@ -133,7 +133,7 @@ def demo_app(environ,start_response):
     h = sorted(environ.items())
     for k,v in h:
         print(k,'=',repr(v), file=stdout)
-    start_response(b"200 OK", [(b'Content-Type',b'text/plain; charset=utf-8')])
+    start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
     return [stdout.getvalue().encode("utf-8")]
 
 
index b97a181603d774764e2ea71a6d0d2efce3ae9849..adc3157c74126053bd490bf77e942b3fc1309c5b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -59,6 +59,12 @@ Core and Builtins
 Library
 -------
 
+- wsgiref now implements and validates PEP 3333, rather than an experimental
+  extension of PEP 333.  (Note: earlier versions of Python 3.x may have
+  incorrectly validated some non-compliant applications as WSGI compliant;
+  if your app validates with Python <3.2b1+, but not on this version, it is
+  likely the case that your app was not compliant.)
+
 - Issue #10280: NNTP.nntp_version should reflect the highest version
   advertised by the server.