[Python-checkins] gh-96959: Update HTTP links which are redirected to HTTPS (GH-96961)

miss-islington webhook-mailer at python.org
Sun Sep 25 04:20:51 EDT 2022


https://github.com/python/cpython/commit/4d1de8704215858e4db1c248b6caeed40338e887
commit: 4d1de8704215858e4db1c248b6caeed40338e887
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-09-25T01:20:45-07:00
summary:

gh-96959: Update HTTP links which are redirected to HTTPS (GH-96961)

(cherry picked from commit db39050396a104c73d0da473a2f00a62f9dfdfaa)

Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>

files:
M Doc/about.rst
M Doc/faq/general.rst
M Doc/faq/library.rst
M Doc/faq/programming.rst
M Doc/howto/unicode.rst
M Doc/library/bisect.rst
M Doc/library/decimal.rst
M Doc/library/mailbox.rst
M Doc/library/multiprocessing.shared_memory.rst
M Doc/library/pickle.rst
M Doc/library/random.rst
M Doc/tutorial/inputoutput.rst
M Doc/whatsnew/2.6.rst
M Doc/whatsnew/3.1.rst
M Include/dynamic_annotations.h
M Lib/json/__init__.py
M Lib/json/decoder.py
M Lib/json/encoder.py
M Lib/test/test_ipaddress.py
M Lib/test/test_json/test_fail.py
M Lib/test/test_json/test_pass1.py
M Lib/test/test_json/test_pass2.py
M Lib/test/test_json/test_pass3.py
M Lib/wsgiref/validate.py

diff --git a/Doc/about.rst b/Doc/about.rst
index 0ce35667924b..5e6160ff2700 100644
--- a/Doc/about.rst
+++ b/Doc/about.rst
@@ -7,7 +7,7 @@ These documents are generated from `reStructuredText`_ sources by `Sphinx`_, a
 document processor specifically written for the Python documentation.
 
 .. _reStructuredText: https://docutils.sourceforge.io/rst.html
-.. _Sphinx: http://sphinx-doc.org/
+.. _Sphinx: https://www.sphinx-doc.org/
 
 .. In the online version of these documents, you can submit comments and suggest
    changes directly on the documentation pages.
diff --git a/Doc/faq/general.rst b/Doc/faq/general.rst
index 6c7e4fc67c0a..988f05757a8a 100644
--- a/Doc/faq/general.rst
+++ b/Doc/faq/general.rst
@@ -182,7 +182,7 @@ at https://docs.python.org/3/.  PDF, plain text, and downloadable HTML versions
 also available at https://docs.python.org/3/download.html.
 
 The documentation is written in reStructuredText and processed by `the Sphinx
-documentation tool <http://sphinx-doc.org/>`__.  The reStructuredText source for
+documentation tool <https://www.sphinx-doc.org/>`__.  The reStructuredText source for
 the documentation is part of the Python source distribution.
 
 
@@ -264,7 +264,7 @@ Where in the world is www.python.org located?
 ---------------------------------------------
 
 The Python project's infrastructure is located all over the world and is managed
-by the Python Infrastructure Team. Details `here <http://infra.psf.io>`__.
+by the Python Infrastructure Team. Details `here <https://infra.psf.io>`__.
 
 
 Why is it called Python?
diff --git a/Doc/faq/library.rst b/Doc/faq/library.rst
index 8167bf22f0b1..ad839891fdcc 100644
--- a/Doc/faq/library.rst
+++ b/Doc/faq/library.rst
@@ -181,7 +181,7 @@ How do I create documentation from doc strings?
 The :mod:`pydoc` module can create HTML from the doc strings in your Python
 source code.  An alternative for creating API documentation purely from
 docstrings is `epydoc <http://epydoc.sourceforge.net/>`_.  `Sphinx
-<http://sphinx-doc.org>`_ can also include docstring content.
+<https://www.sphinx-doc.org>`_ can also include docstring content.
 
 
 How do I get a single keypress at a time?
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst
index a3fb2fa5323c..e90c501c565e 100644
--- a/Doc/faq/programming.rst
+++ b/Doc/faq/programming.rst
@@ -1270,7 +1270,7 @@ use a list comprehension::
    A = [[None] * w for i in range(h)]
 
 Or, you can use an extension that provides a matrix datatype; `NumPy
-<http://www.numpy.org/>`_ is the best known.
+<https://numpy.org/>`_ is the best known.
 
 
 How do I apply a method to a sequence of objects?
diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst
index 4969d2420d6a..ca09aee72bf8 100644
--- a/Doc/howto/unicode.rst
+++ b/Doc/howto/unicode.rst
@@ -517,7 +517,7 @@ References
 
 Some good alternative discussions of Python's Unicode support are:
 
-* `Processing Text Files in Python 3 <http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html>`_, by Nick Coghlan.
+* `Processing Text Files in Python 3 <https://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html>`_, by Nick Coghlan.
 * `Pragmatic Unicode <https://nedbatchelder.com/text/unipain.html>`_, a PyCon 2012 presentation by Ned Batchelder.
 
 The :class:`str` type is described in the Python library reference at
diff --git a/Doc/library/bisect.rst b/Doc/library/bisect.rst
index c2927c1ebd0e..9b40f80f5878 100644
--- a/Doc/library/bisect.rst
+++ b/Doc/library/bisect.rst
@@ -127,7 +127,7 @@ thoughts in mind:
 .. seealso::
 
    * `Sorted Collections
-     <http://www.grantjenks.com/docs/sortedcollections/>`_ is a high performance
+     <https://grantjenks.com/docs/sortedcollections/>`_ is a high performance
      module that uses *bisect* to managed sorted collections of data.
 
    * The `SortedCollection recipe
diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst
index e7d3950fd143..b7e836308fa8 100644
--- a/Doc/library/decimal.rst
+++ b/Doc/library/decimal.rst
@@ -114,7 +114,7 @@ reset them before monitoring a calculation.
 .. seealso::
 
    * IBM's General Decimal Arithmetic Specification, `The General Decimal Arithmetic
-     Specification <http://speleotrove.com/decimal/decarith.html>`_.
+     Specification <https://speleotrove.com/decimal/decarith.html>`_.
 
 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst
index d74fc8059fd5..69751d5cbf4d 100644
--- a/Doc/library/mailbox.rst
+++ b/Doc/library/mailbox.rst
@@ -614,7 +614,7 @@ Supported mailbox formats are Maildir, mbox, MH, Babyl, and MMDF.
 
 .. seealso::
 
-   `nmh - Message Handling System <http://www.nongnu.org/nmh/>`_
+   `nmh - Message Handling System <https://www.nongnu.org/nmh/>`_
       Home page of :program:`nmh`, an updated version of the original :program:`mh`.
 
    `MH & nmh: Email for Users & Programmers <https://rand-mh.sourceforge.io/book/>`_
diff --git a/Doc/library/multiprocessing.shared_memory.rst b/Doc/library/multiprocessing.shared_memory.rst
index 127a82d47aa1..76046b34610a 100644
--- a/Doc/library/multiprocessing.shared_memory.rst
+++ b/Doc/library/multiprocessing.shared_memory.rst
@@ -125,7 +125,7 @@ instances::
 
 
 The following example demonstrates a practical use of the :class:`SharedMemory`
-class with `NumPy arrays <https://www.numpy.org/>`_, accessing the
+class with `NumPy arrays <https://numpy.org/>`_, accessing the
 same ``numpy.ndarray`` from two distinct Python shells:
 
 .. doctest::
diff --git a/Doc/library/pickle.rst b/Doc/library/pickle.rst
index 41b0f48f4611..79476b04cd91 100644
--- a/Doc/library/pickle.rst
+++ b/Doc/library/pickle.rst
@@ -90,7 +90,7 @@ Comparison with ``json``
 ^^^^^^^^^^^^^^^^^^^^^^^^
 
 There are fundamental differences between the pickle protocols and
-`JSON (JavaScript Object Notation) <http://json.org>`_:
+`JSON (JavaScript Object Notation) <https://json.org>`_:
 
 * JSON is a text serialization format (it outputs unicode text, although
   most of the time it is then encoded to ``utf-8``), while pickle is
diff --git a/Doc/library/random.rst b/Doc/library/random.rst
index cf9f04d969df..28d83bb7f327 100644
--- a/Doc/library/random.rst
+++ b/Doc/library/random.rst
@@ -548,14 +548,14 @@ Simulation of arrival times and service deliveries for a multiserver queue::
    including simulation, sampling, shuffling, and cross-validation.
 
    `Economics Simulation
-   <http://nbviewer.jupyter.org/url/norvig.com/ipython/Economics.ipynb>`_
+   <https://nbviewer.jupyter.org/url/norvig.com/ipython/Economics.ipynb>`_
    a simulation of a marketplace by
    `Peter Norvig <http://norvig.com/bio.html>`_ that shows effective
    use of many of the tools and distributions provided by this module
    (gauss, uniform, sample, betavariate, choice, triangular, and randrange).
 
    `A Concrete Introduction to Probability (using Python)
-   <http://nbviewer.jupyter.org/url/norvig.com/ipython/Probability.ipynb>`_
+   <https://nbviewer.jupyter.org/url/norvig.com/ipython/Probability.ipynb>`_
    a tutorial by `Peter Norvig <http://norvig.com/bio.html>`_ covering
    the basics of probability theory, how to write simulations, and
    how to perform data analysis using Python.
diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst
index de84ab7fac8f..3581b3727a53 100644
--- a/Doc/tutorial/inputoutput.rst
+++ b/Doc/tutorial/inputoutput.rst
@@ -478,7 +478,7 @@ becomes complicated.
 Rather than having users constantly writing and debugging code to save
 complicated data types to files, Python allows you to use the popular data
 interchange format called `JSON (JavaScript Object Notation)
-<http://json.org>`_.  The standard module called :mod:`json` can take Python
+<https://json.org>`_.  The standard module called :mod:`json` can take Python
 data hierarchies, and convert them to string representations; this process is
 called :dfn:`serializing`.  Reconstructing the data from the string representation
 is called :dfn:`deserializing`.  Between serializing and deserializing, the
diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst
index 3d0d18746a21..5a3c103f29a7 100644
--- a/Doc/whatsnew/2.6.rst
+++ b/Doc/whatsnew/2.6.rst
@@ -217,7 +217,7 @@ the time required to finish the job.
 During the 2.6 development cycle, Georg Brandl put a lot of effort
 into building a new toolchain for processing the documentation.  The
 resulting package is called Sphinx, and is available from
-http://sphinx-doc.org/.
+https://www.sphinx-doc.org/.
 
 Sphinx concentrates on HTML output, producing attractively styled and
 modern HTML; printed output is still supported through conversion to
@@ -235,7 +235,7 @@ have adopted Sphinx as their documentation tool.
    `Documenting Python <https://devguide.python.org/documenting/>`__
        Describes how to write for Python's documentation.
 
-   `Sphinx <http://sphinx-doc.org/>`__
+   `Sphinx <https://www.sphinx-doc.org/>`__
      Documentation and code for the Sphinx toolchain.
 
    `Docutils <https://docutils.sourceforge.io>`__
@@ -1926,7 +1926,7 @@ changes, or look through the Subversion logs for all the details.
   the left to six places.  (Contributed by Skip Montanaro; :issue:`1158`.)
 
 * The :mod:`decimal` module was updated to version 1.66 of
-  `the General Decimal Specification <http://speleotrove.com/decimal/decarith.html>`__.  New features
+  `the General Decimal Specification <https://speleotrove.com/decimal/decarith.html>`__.  New features
   include some methods for some basic mathematical functions such as
   :meth:`exp` and :meth:`log10`::
 
diff --git a/Doc/whatsnew/3.1.rst b/Doc/whatsnew/3.1.rst
index 6ce6358d49fb..fba8816bb243 100644
--- a/Doc/whatsnew/3.1.rst
+++ b/Doc/whatsnew/3.1.rst
@@ -451,7 +451,7 @@ Major performance enhancements have been added:
 * The :mod:`json` module now has a C extension to substantially improve
   its performance.  In addition, the API was modified so that json works
   only with :class:`str`, not with :class:`bytes`.  That change makes the
-  module closely match the `JSON specification <http://json.org/>`_
+  module closely match the `JSON specification <https://json.org/>`_
   which is defined in terms of Unicode.
 
   (Contributed by Bob Ippolito and converted to Py3.1 by Antoine Pitrou
diff --git a/Include/dynamic_annotations.h b/Include/dynamic_annotations.h
index 0bd1a833c2e5..4d4def9bf898 100644
--- a/Include/dynamic_annotations.h
+++ b/Include/dynamic_annotations.h
@@ -44,7 +44,7 @@
    Actual implementation of these macros may differ depending on the
    dynamic analysis tool being used.
 
-   See http://code.google.com/p/data-race-test/  for more information.
+   See https://code.google.com/p/data-race-test/  for more information.
 
    This file supports the following dynamic analysis tools:
    - None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero).
@@ -140,7 +140,7 @@
      of the mutex's critical sections individually using the annotations above.
      This annotation makes sense only for hybrid race detectors. For pure
      happens-before detectors this is a no-op. For more details see
-     http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */
+     https://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */
 #define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \
     AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu)
 
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index e4c21daaf3e4..ed2c74771ea8 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -1,4 +1,4 @@
-r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of
+r"""JSON (JavaScript Object Notation) <https://json.org> is a subset of
 JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
 interchange format.
 
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py
index d7d824454e1b..c5d9ae2d0d5d 100644
--- a/Lib/json/decoder.py
+++ b/Lib/json/decoder.py
@@ -252,7 +252,7 @@ def JSONArray(s_and_end, scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
 
 
 class JSONDecoder(object):
-    """Simple JSON <http://json.org> decoder
+    """Simple JSON <https://json.org> decoder
 
     Performs the following translations in decoding by default:
 
diff --git a/Lib/json/encoder.py b/Lib/json/encoder.py
index 864f46d9dbb7..45f547741885 100644
--- a/Lib/json/encoder.py
+++ b/Lib/json/encoder.py
@@ -72,7 +72,7 @@ def replace(match):
     c_encode_basestring_ascii or py_encode_basestring_ascii)
 
 class JSONEncoder(object):
-    """Extensible JSON <http://json.org> encoder for Python data structures.
+    """Extensible JSON <https://json.org> encoder for Python data structures.
 
     Supports the following objects and types by default:
 
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index c9ae7dab387c..5c656c49e2e7 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1652,7 +1652,7 @@ def testNth(self):
         self.assertRaises(IndexError, self.ipv6_scoped_network.__getitem__, 1 << 64)
 
     def testGetitem(self):
-        # http://code.google.com/p/ipaddr-py/issues/detail?id=15
+        # https://code.google.com/p/ipaddr-py/issues/detail?id=15
         addr = ipaddress.IPv4Network('172.31.255.128/255.255.255.240')
         self.assertEqual(28, addr.prefixlen)
         addr_list = list(addr)
diff --git a/Lib/test/test_json/test_fail.py b/Lib/test/test_json/test_fail.py
index eb9064edea91..efc982e8b0eb 100644
--- a/Lib/test/test_json/test_fail.py
+++ b/Lib/test/test_json/test_fail.py
@@ -2,73 +2,73 @@
 
 # 2007-10-05
 JSONDOCS = [
-    # http://json.org/JSON_checker/test/fail1.json
+    # https://json.org/JSON_checker/test/fail1.json
     '"A JSON payload should be an object or array, not a string."',
-    # http://json.org/JSON_checker/test/fail2.json
+    # https://json.org/JSON_checker/test/fail2.json
     '["Unclosed array"',
-    # http://json.org/JSON_checker/test/fail3.json
+    # https://json.org/JSON_checker/test/fail3.json
     '{unquoted_key: "keys must be quoted"}',
-    # http://json.org/JSON_checker/test/fail4.json
+    # https://json.org/JSON_checker/test/fail4.json
     '["extra comma",]',
-    # http://json.org/JSON_checker/test/fail5.json
+    # https://json.org/JSON_checker/test/fail5.json
     '["double extra comma",,]',
-    # http://json.org/JSON_checker/test/fail6.json
+    # https://json.org/JSON_checker/test/fail6.json
     '[   , "<-- missing value"]',
-    # http://json.org/JSON_checker/test/fail7.json
+    # https://json.org/JSON_checker/test/fail7.json
     '["Comma after the close"],',
-    # http://json.org/JSON_checker/test/fail8.json
+    # https://json.org/JSON_checker/test/fail8.json
     '["Extra close"]]',
-    # http://json.org/JSON_checker/test/fail9.json
+    # https://json.org/JSON_checker/test/fail9.json
     '{"Extra comma": true,}',
-    # http://json.org/JSON_checker/test/fail10.json
+    # https://json.org/JSON_checker/test/fail10.json
     '{"Extra value after close": true} "misplaced quoted value"',
-    # http://json.org/JSON_checker/test/fail11.json
+    # https://json.org/JSON_checker/test/fail11.json
     '{"Illegal expression": 1 + 2}',
-    # http://json.org/JSON_checker/test/fail12.json
+    # https://json.org/JSON_checker/test/fail12.json
     '{"Illegal invocation": alert()}',
-    # http://json.org/JSON_checker/test/fail13.json
+    # https://json.org/JSON_checker/test/fail13.json
     '{"Numbers cannot have leading zeroes": 013}',
-    # http://json.org/JSON_checker/test/fail14.json
+    # https://json.org/JSON_checker/test/fail14.json
     '{"Numbers cannot be hex": 0x14}',
-    # http://json.org/JSON_checker/test/fail15.json
+    # https://json.org/JSON_checker/test/fail15.json
     '["Illegal backslash escape: \\x15"]',
-    # http://json.org/JSON_checker/test/fail16.json
+    # https://json.org/JSON_checker/test/fail16.json
     '[\\naked]',
-    # http://json.org/JSON_checker/test/fail17.json
+    # https://json.org/JSON_checker/test/fail17.json
     '["Illegal backslash escape: \\017"]',
-    # http://json.org/JSON_checker/test/fail18.json
+    # https://json.org/JSON_checker/test/fail18.json
     '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]',
-    # http://json.org/JSON_checker/test/fail19.json
+    # https://json.org/JSON_checker/test/fail19.json
     '{"Missing colon" null}',
-    # http://json.org/JSON_checker/test/fail20.json
+    # https://json.org/JSON_checker/test/fail20.json
     '{"Double colon":: null}',
-    # http://json.org/JSON_checker/test/fail21.json
+    # https://json.org/JSON_checker/test/fail21.json
     '{"Comma instead of colon", null}',
-    # http://json.org/JSON_checker/test/fail22.json
+    # https://json.org/JSON_checker/test/fail22.json
     '["Colon instead of comma": false]',
-    # http://json.org/JSON_checker/test/fail23.json
+    # https://json.org/JSON_checker/test/fail23.json
     '["Bad value", truth]',
-    # http://json.org/JSON_checker/test/fail24.json
+    # https://json.org/JSON_checker/test/fail24.json
     "['single quote']",
-    # http://json.org/JSON_checker/test/fail25.json
+    # https://json.org/JSON_checker/test/fail25.json
     '["\ttab\tcharacter\tin\tstring\t"]',
-    # http://json.org/JSON_checker/test/fail26.json
+    # https://json.org/JSON_checker/test/fail26.json
     '["tab\\   character\\   in\\  string\\  "]',
-    # http://json.org/JSON_checker/test/fail27.json
+    # https://json.org/JSON_checker/test/fail27.json
     '["line\nbreak"]',
-    # http://json.org/JSON_checker/test/fail28.json
+    # https://json.org/JSON_checker/test/fail28.json
     '["line\\\nbreak"]',
-    # http://json.org/JSON_checker/test/fail29.json
+    # https://json.org/JSON_checker/test/fail29.json
     '[0e]',
-    # http://json.org/JSON_checker/test/fail30.json
+    # https://json.org/JSON_checker/test/fail30.json
     '[0e+]',
-    # http://json.org/JSON_checker/test/fail31.json
+    # https://json.org/JSON_checker/test/fail31.json
     '[0e+-1]',
-    # http://json.org/JSON_checker/test/fail32.json
+    # https://json.org/JSON_checker/test/fail32.json
     '{"Comma instead if closing brace": true,',
-    # http://json.org/JSON_checker/test/fail33.json
+    # https://json.org/JSON_checker/test/fail33.json
     '["mismatch"}',
-    # http://code.google.com/p/simplejson/issues/detail?id=3
+    # https://code.google.com/archive/p/simplejson/issues/3
     '["A\u001FZ control characters in string"]',
 ]
 
diff --git a/Lib/test/test_json/test_pass1.py b/Lib/test/test_json/test_pass1.py
index 15e64b0aeae7..26bf3cdbd773 100644
--- a/Lib/test/test_json/test_pass1.py
+++ b/Lib/test/test_json/test_pass1.py
@@ -1,7 +1,7 @@
 from test.test_json import PyTest, CTest
 
 
-# from http://json.org/JSON_checker/test/pass1.json
+# from https://json.org/JSON_checker/test/pass1.json
 JSON = r'''
 [
     "JSON Test Pattern pass1",
diff --git a/Lib/test/test_json/test_pass2.py b/Lib/test/test_json/test_pass2.py
index 35075249e3bc..9340de665aab 100644
--- a/Lib/test/test_json/test_pass2.py
+++ b/Lib/test/test_json/test_pass2.py
@@ -1,7 +1,7 @@
 from test.test_json import PyTest, CTest
 
 
-# from http://json.org/JSON_checker/test/pass2.json
+# from https://json.org/JSON_checker/test/pass2.json
 JSON = r'''
 [[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
 '''
diff --git a/Lib/test/test_json/test_pass3.py b/Lib/test/test_json/test_pass3.py
index cd0cf170d275..0adccc1c2a53 100644
--- a/Lib/test/test_json/test_pass3.py
+++ b/Lib/test/test_json/test_pass3.py
@@ -1,7 +1,7 @@
 from test.test_json import PyTest, CTest
 
 
-# from http://json.org/JSON_checker/test/pass3.json
+# from https://json.org/JSON_checker/test/pass3.json
 JSON = r'''
 {
     "JSON Test Pattern pass3": {
diff --git a/Lib/wsgiref/validate.py b/Lib/wsgiref/validate.py
index 6e16578dbb64..6044e320a474 100644
--- a/Lib/wsgiref/validate.py
+++ b/Lib/wsgiref/validate.py
@@ -1,6 +1,6 @@
 # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org)
-# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
-# Also licenced under the Apache License, 2.0: http://opensource.org/licenses/apache2.0.php
+# Licensed under the MIT license: https://opensource.org/licenses/mit-license.php
+# Also licenced under the Apache License, 2.0: https://opensource.org/licenses/apache2.0.php
 # Licensed to PSF under a Contributor Agreement
 """
 Middleware to check for obedience to the WSGI specification.



More information about the Python-checkins mailing list