summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <github@m.merickel.org>2018-11-18 12:56:45 -0600
committerGitHub <noreply@github.com>2018-11-18 12:56:45 -0600
commit880fcbdf366e231a746dc3ab694b1b88771d23c2 (patch)
treeb0349a9bfb006c26d454b96aaf7114f1714ba776
parentd4ce9d3f915b18425b4ce5224a51a89342270371 (diff)
parent847d1835a5b76da4925ee3248e69148cc4235df9 (diff)
downloadpyramid-880fcbdf366e231a746dc3ab694b1b88771d23c2.tar.gz
pyramid-880fcbdf366e231a746dc3ab694b1b88771d23c2.tar.bz2
pyramid-880fcbdf366e231a746dc3ab694b1b88771d23c2.zip
Merge pull request #5 from stevepiercy/drop-py2
Drop py2
-rw-r--r--HACKING.txt13
-rw-r--r--RELEASING.txt5
-rw-r--r--docs/api/compat.rst156
-rw-r--r--docs/glossary.rst2
-rw-r--r--docs/narr/commandline.rst8
-rw-r--r--docs/narr/install.rst3
-rw-r--r--docs/narr/upgrading.rst1
-rw-r--r--docs/narr/webob.rst3
-rw-r--r--docs/quick_tour.rst15
-rw-r--r--docs/quick_tour/logging/setup.py4
-rw-r--r--docs/quick_tour/package/setup.py4
-rw-r--r--docs/quick_tour/sessions/setup.py4
-rw-r--r--docs/quick_tour/sqla_demo/setup.py4
-rw-r--r--docs/quick_tour/views/views.py4
-rw-r--r--docs/quick_tutorial/cookiecutters/setup.py4
-rw-r--r--docs/quick_tutorial/index.rst3
-rw-r--r--docs/quick_tutorial/requirements.rst12
-rw-r--r--docs/tutorials/wiki/src/authorization/setup.py4
-rw-r--r--docs/tutorials/wiki/src/basiclayout/setup.py4
-rw-r--r--docs/tutorials/wiki/src/installation/setup.py4
-rw-r--r--docs/tutorials/wiki/src/models/setup.py4
-rw-r--r--docs/tutorials/wiki/src/tests/setup.py4
-rw-r--r--docs/tutorials/wiki/src/views/setup.py4
-rw-r--r--docs/tutorials/wiki2/background.rst2
-rw-r--r--docs/tutorials/wiki2/installation.rst10
-rw-r--r--docs/tutorials/wiki2/src/authentication/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/authentication/tutorial/views/default.py2
-rw-r--r--docs/tutorials/wiki2/src/authorization/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/authorization/tutorial/views/default.py2
-rw-r--r--docs/tutorials/wiki2/src/basiclayout/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/installation/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/models/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/tests/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/tests/tutorial/views/default.py2
-rw-r--r--docs/tutorials/wiki2/src/views/setup.py4
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/views/default.py2
-rw-r--r--setup.py4
37 files changed, 69 insertions, 252 deletions
diff --git a/HACKING.txt b/HACKING.txt
index acd65e4fd..901eb8518 100644
--- a/HACKING.txt
+++ b/HACKING.txt
@@ -34,10 +34,10 @@ In order to add a feature to Pyramid:
- The feature must be documented in both the API and narrative documentation
(in `docs/`).
-- The feature must work fully on the following CPython versions: 2.7, 3.4, 3.5,
- 3.6, and 3.7 on both UNIX and Windows.
+- The feature must work fully on the following CPython versions: 3.4, 3.5, 3.6,
+ and 3.7 on both UNIX and Windows.
-- The feature must work on the latest version of PyPy.
+- The feature must work on the latest version of PyPy3.
- The feature must not depend on any particular persistence layer (filesystem,
SQL, etc).
@@ -65,10 +65,9 @@ Running Tests
$ tox -e py37
- This command will run tests on the latest versions of Python 2 and 3 with
- coverage totaled for both versions.
+ This command will run tests on the latest version of Python 3 with coverage.
- $ tox -e py2-cover,py3-cover,coverage
+ $ tox -e py3-cover,coverage
- To run individual tests (i.e., during development), you can use `nosetests`
syntax as follows, where `$VENV` is an environment variable set to the path
@@ -105,7 +104,7 @@ Test Coverage
-------------
- The codebase *must* have 100% test statement coverage after each commit. You
- can test coverage via `tox -epy2-cover,py3-cover,coverage`.
+ can test coverage via `tox -epy3-cover,coverage`.
Documentation Coverage and Building HTML Documentation
diff --git a/RELEASING.txt b/RELEASING.txt
index 94726f9f3..73e79d057 100644
--- a/RELEASING.txt
+++ b/RELEASING.txt
@@ -33,11 +33,6 @@ Prepare new release branch
- Run tests on Windows if feasible.
-- Make sure all scaffold tests pass (CPython 2.7, 3.4, 3.5, 3.6, and 3.7, and
- PyPy on UNIX; this doesn't work on Windows):
-
- $ tox -e{py27,py34,py35,py36,py37,pypy}-scaffolds
-
- For each ``pyramid-cookiecutter-*``, make a new branch off "master" with the
same name to align with the new Pyramid release branch name.
diff --git a/docs/api/compat.rst b/docs/api/compat.rst
deleted file mode 100644
index bb34f38e4..000000000
--- a/docs/api/compat.rst
+++ /dev/null
@@ -1,156 +0,0 @@
-.. _compat_module:
-
-:mod:`pyramid.compat`
-----------------------
-
-The ``pyramid.compat`` module provides platform and version compatibility for
-Pyramid and its add-ons across Python platform and version differences. APIs
-will be removed from this module over time as Pyramid ceases to support
-systems which require compatibility imports.
-
-.. automodule:: pyramid.compat
-
- .. autofunction:: ascii_native_
-
- .. attribute:: binary_type
-
- Binary type for this platform. For Python 3, it's ``bytes``. For
- Python 2, it's ``str``.
-
- .. autofunction:: bytes_
-
- .. attribute:: class_types
-
- Sequence of class types for this platform. For Python 3, it's
- ``(type,)``. For Python 2, it's ``(type, types.ClassType)``.
-
- .. attribute:: configparser
-
- On Python 2, the ``ConfigParser`` module, on Python 3, the
- ``configparser`` module.
-
- .. function:: escape(v)
-
- On Python 2, the ``cgi.escape`` function, on Python 3, the
- ``html.escape`` function.
-
- .. function:: exec_(code, globs=None, locs=None)
-
- Exec code in a compatible way on both Python 2 and 3.
-
- .. attribute:: im_func
-
- On Python 2, the string value ``im_func``, on Python 3, the string
- value ``__func__``.
-
- .. function:: input_(v)
-
- On Python 2, the ``raw_input`` function, on Python 3, the
- ``input`` function.
-
- .. attribute:: integer_types
-
- Sequence of integer types for this platform. For Python 3, it's
- ``(int,)``. For Python 2, it's ``(int, long)``.
-
- .. function:: is_nonstr_iter(v)
-
- Return ``True`` if ``v`` is a non-``str`` iterable on both Python 2 and
- Python 3.
-
- .. function:: iteritems_(d)
-
- Return ``d.items()`` on Python 3, ``d.iteritems()`` on Python 2.
-
- .. function:: itervalues_(d)
-
- Return ``d.values()`` on Python 3, ``d.itervalues()`` on Python 2.
-
- .. function:: iterkeys_(d)
-
- Return ``d.keys()`` on Python 3, ``d.iterkeys()`` on Python 2.
-
- .. attribute:: long
-
- Long type for this platform. For Python 3, it's ``int``. For
- Python 2, it's ``long``.
-
- .. function:: map_(v)
-
- Return ``list(map(v))`` on Python 3, ``map(v)`` on Python 2.
-
- .. attribute:: pickle
-
- ``cPickle`` module if it exists, ``pickle`` module otherwise.
-
- .. attribute:: PY3
-
- ``True`` if running on Python 3, ``False`` otherwise.
-
- .. attribute:: PYPY
-
- ``True`` if running on PyPy, ``False`` otherwise.
-
- .. function:: reraise(tp, value, tb=None)
-
- Reraise an exception in a compatible way on both Python 2 and Python 3,
- e.g. ``reraise(*sys.exc_info())``.
-
- .. attribute:: string_types
-
- Sequence of string types for this platform. For Python 3, it's
- ``(str,)``. For Python 2, it's ``(basestring,)``.
-
- .. attribute:: SimpleCookie
-
- On Python 2, the ``Cookie.SimpleCookie`` class, on Python 3, the
- ``http.cookies.SimpleCookie`` module.
-
- .. autofunction:: text_
-
- .. attribute:: text_type
-
- Text type for this platform. For Python 3, it's ``str``. For Python
- 2, it's ``unicode``.
-
- .. autofunction:: native_
-
- .. attribute:: urlparse
-
- ``urlparse`` module on Python 2, ``urllib.parse`` module on Python 3.
-
- .. attribute:: url_quote
-
- ``urllib.quote`` function on Python 2, ``urllib.parse.quote`` function
- on Python 3.
-
- .. attribute:: url_quote_plus
-
- ``urllib.quote_plus`` function on Python 2, ``urllib.parse.quote_plus``
- function on Python 3.
-
- .. attribute:: url_unquote
-
- ``urllib.unquote`` function on Python 2, ``urllib.parse.unquote``
- function on Python 3.
-
- .. attribute:: url_encode
-
- ``urllib.urlencode`` function on Python 2, ``urllib.parse.urlencode``
- function on Python 3.
-
- .. attribute:: url_open
-
- ``urllib2.urlopen`` function on Python 2, ``urllib.request.urlopen``
- function on Python 3.
-
- .. function:: url_unquote_text(v, encoding='utf-8', errors='replace')
-
- On Python 2, return ``url_unquote(v).decode(encoding(encoding, errors))``;
- on Python 3, return the result of ``urllib.parse.unquote``.
-
- .. function:: url_unquote_native(v, encoding='utf-8', errors='replace')
-
- On Python 2, return ``native_(url_unquote_text_v, encoding, errors))``;
- on Python 3, return the result of ``urllib.parse.unquote``.
-
diff --git a/docs/glossary.rst b/docs/glossary.rst
index f42b298df..e15d28fa5 100644
--- a/docs/glossary.rst
+++ b/docs/glossary.rst
@@ -1071,7 +1071,7 @@ Glossary
Green Unicorn
Aka ``gunicorn``, a fast :term:`WSGI` server that runs on Unix under
- Python 2.6+ or Python 3.1+. See https://gunicorn.org/ for detailed
+ Python 2.6+ or Python 3.4+. See https://gunicorn.org/ for detailed
information.
predicate factory
diff --git a/docs/narr/commandline.rst b/docs/narr/commandline.rst
index b571a7d7b..962193ec3 100644
--- a/docs/narr/commandline.rst
+++ b/docs/narr/commandline.rst
@@ -1006,8 +1006,8 @@ top-level directory, your ``setup.py`` file will look something like this:
requires = ['pyramid', 'pyramid_debugtoolbar']
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest', # includes virtualenv
+ 'WebTest >= 1.3.1',
+ 'pytest',
'pytest-cov',
]
@@ -1073,8 +1073,8 @@ The result will be something like:
requires = ['pyramid', 'pyramid_debugtoolbar']
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest', # includes virtualenv
+ 'WebTest >= 1.3.1',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/narr/install.rst b/docs/narr/install.rst
index 248b432d3..268ae5f8d 100644
--- a/docs/narr/install.rst
+++ b/docs/narr/install.rst
@@ -21,8 +21,7 @@ the following sections.
.. sidebar:: Python Versions
- As of this writing, :app:`Pyramid` is tested against Python 2.7,
- Python 3.4, Python 3.5, Python 3.6, Python 3.7, and PyPy.
+ As of this writing, :app:`Pyramid` is tested against Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8 (with allowed failures), and PyPy3.
:app:`Pyramid` is known to run on all popular Unix-like systems such as Linux,
macOS, and FreeBSD, as well as on Windows platforms. It is also known to
diff --git a/docs/narr/upgrading.rst b/docs/narr/upgrading.rst
index 12e146cf1..87e4647c3 100644
--- a/docs/narr/upgrading.rst
+++ b/docs/narr/upgrading.rst
@@ -86,7 +86,6 @@ At the time of a Pyramid version release, each supports all versions of Python
through the end of their lifespans. The end-of-life for a given version of
Python is when security updates are no longer released.
-- `Python 2.7 Lifespan <https://devguide.python.org/#status-of-python-branches>`_ 2020-01-01.
- `Python 3.4 Lifespan <https://devguide.python.org/#status-of-python-branches>`_ 2019-03-16 .
- `Python 3.5 Lifespan <https://devguide.python.org/#status-of-python-branches>`_ 2020-09-13 .
- `Python 3.6 Lifespan <https://devguide.python.org/#status-of-python-branches>`_ 2021-12-23.
diff --git a/docs/narr/webob.rst b/docs/narr/webob.rst
index 89dc6e0f1..c9a5a68e1 100644
--- a/docs/narr/webob.rst
+++ b/docs/narr/webob.rst
@@ -188,8 +188,7 @@ of them. Here are a couple that might be useful:
Text (Unicode)
++++++++++++++
-Many of the properties of the request object will be text values (``unicode``
-under Python 2 or ``str`` under Python 3) if the request encoding/charset is
+Many of the properties of the request object will be text values (``str`` type) if the request encoding/charset is
provided. If it is provided, the values in ``req.POST``, ``req.GET``,
``req.params``, and ``req.cookies`` will contain text. The client *can*
indicate the charset with something like ``Content-Type:
diff --git a/docs/quick_tour.rst b/docs/quick_tour.rst
index 1e2c71cf0..fbafead66 100644
--- a/docs/quick_tour.rst
+++ b/docs/quick_tour.rst
@@ -15,12 +15,9 @@ If you would prefer to cut and paste the example code in this tour you may brows
Installation
============
-Once you have a standard Python environment setup, getting started with Pyramid
-is a breeze. Unfortunately "standard" is not so simple in Python. For this
-Quick Tour, it means `Python <https://www.python.org/downloads/>`_, :mod:`python:venv` (or `virtualenv for
-Python 2.7 <https://virtualenv.pypa.io/en/stable/>`_),
-`pip <https://pypi.org/project/pip/>`_, and `Setuptools
-<https://pypi.org/project/setuptools/>`_.
+Once you have a standard Python environment setup, getting started with Pyramid is a breeze.
+Unfortunately "standard" is not so simple in Python.
+For this Quick Tour, it means `Python <https://www.python.org/downloads/>`_, :mod:`python:venv`, `pip <https://pypi.org/project/pip/>`_, and `Setuptools <https://pypi.org/project/setuptools/>`_.
To save a little bit of typing and to be certain that we use the modules,
scripts, and packages installed in our virtual environment, we'll set an
@@ -52,10 +49,8 @@ For Windows:
# or for a specific released version
c:\\> %VENV%\\Scripts\\pip install "pyramid==\ |release|\ "
-Of course Pyramid runs fine on Python 2.7+, as do the examples in this *Quick
-Tour*. We're showing Python 3 for simplicity. (Pyramid had production support
-for Python 3 in October 2011.) Also for simplicity, the remaining examples will
-show only Unix commands.
+As of version 2.0, Pyramid runs on Python 3 only.
+For simplicity, the remaining examples will show only Unix commands.
.. seealso:: See also:
:ref:`Quick Tutorial section on Requirements <qtut_requirements>`,
diff --git a/docs/quick_tour/logging/setup.py b/docs/quick_tour/logging/setup.py
index 27b025384..e9c15db04 100644
--- a/docs/quick_tour/logging/setup.py
+++ b/docs/quick_tour/logging/setup.py
@@ -17,8 +17,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/quick_tour/package/setup.py b/docs/quick_tour/package/setup.py
index 27b025384..e9c15db04 100644
--- a/docs/quick_tour/package/setup.py
+++ b/docs/quick_tour/package/setup.py
@@ -17,8 +17,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/quick_tour/sessions/setup.py b/docs/quick_tour/sessions/setup.py
index 27b025384..e9c15db04 100644
--- a/docs/quick_tour/sessions/setup.py
+++ b/docs/quick_tour/sessions/setup.py
@@ -17,8 +17,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/quick_tour/sqla_demo/setup.py b/docs/quick_tour/sqla_demo/setup.py
index 76cd518ca..28a8e0815 100644
--- a/docs/quick_tour/sqla_demo/setup.py
+++ b/docs/quick_tour/sqla_demo/setup.py
@@ -23,8 +23,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/quick_tour/views/views.py b/docs/quick_tour/views/views.py
index 95a2b60ca..ffbe1d893 100644
--- a/docs/quick_tour/views/views.py
+++ b/docs/quick_tour/views/views.py
@@ -1,4 +1,4 @@
-from pyramid.compat import escape
+from html import escape
from pyramid.httpexceptions import HTTPFound
from pyramid.response import Response
@@ -16,7 +16,7 @@ def home_view(request):
def hello_view(request):
name = request.params.get('name', 'No Name')
body = '<p>Hi %s, this <a href="/goto">redirects</a></p>'
- # pyramid.compat.escape to prevent Cross-Site Scripting (XSS) [CWE 79]
+ # Python html.escape to prevent Cross-Site Scripting (XSS) [CWE 79]
return Response(body % escape(name))
diff --git a/docs/quick_tutorial/cookiecutters/setup.py b/docs/quick_tutorial/cookiecutters/setup.py
index 9482e7c32..d5d3d018b 100644
--- a/docs/quick_tutorial/cookiecutters/setup.py
+++ b/docs/quick_tutorial/cookiecutters/setup.py
@@ -17,8 +17,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/quick_tutorial/index.rst b/docs/quick_tutorial/index.rst
index b5b7b3313..d727502e9 100644
--- a/docs/quick_tutorial/index.rst
+++ b/docs/quick_tutorial/index.rst
@@ -4,8 +4,7 @@
Quick Tutorial for Pyramid
==========================
-Pyramid is a web framework for Python 2 and 3. This tutorial gives a Python
-3/2-compatible, high-level tour of the major features.
+This tutorial gives a high-level tour of the major features.
This hands-on tutorial covers "a little about a lot": practical introductions
to the most common facilities. Fun, fast-paced, and most certainly not aimed at
diff --git a/docs/quick_tutorial/requirements.rst b/docs/quick_tutorial/requirements.rst
index a74c07673..2ed9b8b55 100644
--- a/docs/quick_tutorial/requirements.rst
+++ b/docs/quick_tutorial/requirements.rst
@@ -19,12 +19,11 @@ virtual environment.)
This *Quick Tutorial* is based on:
-* **Python 3.7**. Pyramid fully supports Python 3.4+ and Python 2.7+. This
- tutorial uses **Python 3.7** but runs fine under Python 2.7.
+* **Python 3.7**. Pyramid fully supports Python 3.4+.
+ This tutorial uses **Python 3.7**.
-* **venv**. We believe in virtual environments. For this tutorial, we use
- Python 3's built-in solution :term:`venv`. For Python 2.7, you can install
- :term:`virtualenv`.
+* **venv**. We believe in virtual environments.
+ For this tutorial, we use Python 3's built-in solution :term:`venv`.
* **pip**. We use :term:`pip` for package management.
@@ -158,8 +157,7 @@ environment variable.
# Windows
python -m venv %VENV%
-.. seealso:: See also Python 3's :mod:`venv module <python:venv>` and Python
- 2's `virtualenv <https://virtualenv.pypa.io/en/latest/>`_ package.
+.. seealso:: See also :mod:`venv module <python:venv>`.
Update packaging tools in the virtual environment
diff --git a/docs/tutorials/wiki/src/authorization/setup.py b/docs/tutorials/wiki/src/authorization/setup.py
index 7011387f6..7b405745e 100644
--- a/docs/tutorials/wiki/src/authorization/setup.py
+++ b/docs/tutorials/wiki/src/authorization/setup.py
@@ -24,8 +24,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki/src/basiclayout/setup.py b/docs/tutorials/wiki/src/basiclayout/setup.py
index e05e279e2..a4f143d24 100644
--- a/docs/tutorials/wiki/src/basiclayout/setup.py
+++ b/docs/tutorials/wiki/src/basiclayout/setup.py
@@ -22,8 +22,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki/src/installation/setup.py b/docs/tutorials/wiki/src/installation/setup.py
index e05e279e2..a4f143d24 100644
--- a/docs/tutorials/wiki/src/installation/setup.py
+++ b/docs/tutorials/wiki/src/installation/setup.py
@@ -22,8 +22,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki/src/models/setup.py b/docs/tutorials/wiki/src/models/setup.py
index e05e279e2..a4f143d24 100644
--- a/docs/tutorials/wiki/src/models/setup.py
+++ b/docs/tutorials/wiki/src/models/setup.py
@@ -22,8 +22,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki/src/tests/setup.py b/docs/tutorials/wiki/src/tests/setup.py
index 7011387f6..7b405745e 100644
--- a/docs/tutorials/wiki/src/tests/setup.py
+++ b/docs/tutorials/wiki/src/tests/setup.py
@@ -24,8 +24,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki/src/views/setup.py b/docs/tutorials/wiki/src/views/setup.py
index a11ae6c8f..3c19db7b9 100644
--- a/docs/tutorials/wiki/src/views/setup.py
+++ b/docs/tutorials/wiki/src/views/setup.py
@@ -23,8 +23,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/background.rst b/docs/tutorials/wiki2/background.rst
index c14d3cb7d..09315a77d 100644
--- a/docs/tutorials/wiki2/background.rst
+++ b/docs/tutorials/wiki2/background.rst
@@ -17,6 +17,6 @@ variant, etc.) *or* a Windows system of any kind.
.. note::
- This tutorial runs on both Python 2 and 3 without modification.
+ This tutorial runs on Python 3 without modification.
Have fun!
diff --git a/docs/tutorials/wiki2/installation.rst b/docs/tutorials/wiki2/installation.rst
index 924927cd4..705979065 100644
--- a/docs/tutorials/wiki2/installation.rst
+++ b/docs/tutorials/wiki2/installation.rst
@@ -126,16 +126,6 @@ On Unix
On Windows
^^^^^^^^^^
-Each version of Python uses different paths, so you will need to adjust the path to the command for your Python version. Recent versions of the Python 3 installer for Windows now install a Python launcher.
-
-Python 2.7:
-
-.. code-block:: doscon
-
- c:\Python27\Scripts\virtualenv %VENV%
-
-Python 3.7:
-
.. code-block:: doscon
python -m venv %VENV%
diff --git a/docs/tutorials/wiki2/src/authentication/setup.py b/docs/tutorials/wiki2/src/authentication/setup.py
index e2a30c0e7..f71998afc 100644
--- a/docs/tutorials/wiki2/src/authentication/setup.py
+++ b/docs/tutorials/wiki2/src/authentication/setup.py
@@ -25,8 +25,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/authentication/tutorial/views/default.py b/docs/tutorials/wiki2/src/authentication/tutorial/views/default.py
index 8ed90d5b2..2f0210255 100644
--- a/docs/tutorials/wiki2/src/authentication/tutorial/views/default.py
+++ b/docs/tutorials/wiki2/src/authentication/tutorial/views/default.py
@@ -1,4 +1,4 @@
-from pyramid.compat import escape
+from html import escape
import re
from docutils.core import publish_parts
diff --git a/docs/tutorials/wiki2/src/authorization/setup.py b/docs/tutorials/wiki2/src/authorization/setup.py
index e2a30c0e7..f71998afc 100644
--- a/docs/tutorials/wiki2/src/authorization/setup.py
+++ b/docs/tutorials/wiki2/src/authorization/setup.py
@@ -25,8 +25,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/views/default.py b/docs/tutorials/wiki2/src/authorization/tutorial/views/default.py
index ad271fb46..ad8491b7b 100644
--- a/docs/tutorials/wiki2/src/authorization/tutorial/views/default.py
+++ b/docs/tutorials/wiki2/src/authorization/tutorial/views/default.py
@@ -1,4 +1,4 @@
-from pyramid.compat import escape
+from html import escape
import re
from docutils.core import publish_parts
diff --git a/docs/tutorials/wiki2/src/basiclayout/setup.py b/docs/tutorials/wiki2/src/basiclayout/setup.py
index 11725dd51..746012a74 100644
--- a/docs/tutorials/wiki2/src/basiclayout/setup.py
+++ b/docs/tutorials/wiki2/src/basiclayout/setup.py
@@ -23,8 +23,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/installation/setup.py b/docs/tutorials/wiki2/src/installation/setup.py
index 11725dd51..746012a74 100644
--- a/docs/tutorials/wiki2/src/installation/setup.py
+++ b/docs/tutorials/wiki2/src/installation/setup.py
@@ -23,8 +23,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/models/setup.py b/docs/tutorials/wiki2/src/models/setup.py
index 09e3126ea..b9dc9d93f 100644
--- a/docs/tutorials/wiki2/src/models/setup.py
+++ b/docs/tutorials/wiki2/src/models/setup.py
@@ -24,8 +24,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/tests/setup.py b/docs/tutorials/wiki2/src/tests/setup.py
index e2a30c0e7..f71998afc 100644
--- a/docs/tutorials/wiki2/src/tests/setup.py
+++ b/docs/tutorials/wiki2/src/tests/setup.py
@@ -25,8 +25,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/tests/tutorial/views/default.py b/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
index ad271fb46..ad8491b7b 100644
--- a/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
+++ b/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
@@ -1,4 +1,4 @@
-from pyramid.compat import escape
+from html import escape
import re
from docutils.core import publish_parts
diff --git a/docs/tutorials/wiki2/src/views/setup.py b/docs/tutorials/wiki2/src/views/setup.py
index e2a30c0e7..f71998afc 100644
--- a/docs/tutorials/wiki2/src/views/setup.py
+++ b/docs/tutorials/wiki2/src/views/setup.py
@@ -25,8 +25,8 @@ requires = [
]
tests_require = [
- 'WebTest >= 1.3.1', # py3 compat
- 'pytest>=3.7.4',
+ 'WebTest',
+ 'pytest',
'pytest-cov',
]
diff --git a/docs/tutorials/wiki2/src/views/tutorial/views/default.py b/docs/tutorials/wiki2/src/views/tutorial/views/default.py
index a866af1de..5e28b64fd 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/views/default.py
+++ b/docs/tutorials/wiki2/src/views/tutorial/views/default.py
@@ -1,4 +1,4 @@
-from pyramid.compat import escape
+from html import escape
import re
from docutils.core import publish_parts
diff --git a/setup.py b/setup.py
index b63f4c182..3176442e1 100644
--- a/setup.py
+++ b/setup.py
@@ -44,9 +44,9 @@ tests_require = [
docs_extras = [
- 'Sphinx >= 1.8.1',
+ 'Sphinx >= 1.8.1', # Unicode characters in tree diagrams
'docutils',
- 'pylons-sphinx-themes >= 1.0.8',
+ 'pylons-sphinx-themes >= 1.0.8', # Ethical Ads
'pylons_sphinx_latesturl',
'repoze.sphinx.autointerface',
'sphinxcontrib-autoprogram',