summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/index.rst8
-rw-r--r--docs/narr/install.rst2
-rw-r--r--docs/narr/security.rst4
-rw-r--r--docs/quick_tour/views/views.py6
-rw-r--r--docs/quick_tutorial/authentication.rst2
-rw-r--r--docs/quick_tutorial/authentication/development.ini4
-rw-r--r--docs/quick_tutorial/authentication/setup.py1
-rw-r--r--docs/quick_tutorial/authorization/development.ini4
-rw-r--r--docs/quick_tutorial/authorization/setup.py1
-rw-r--r--docs/quick_tutorial/databases/development.ini4
-rw-r--r--docs/quick_tutorial/databases/setup.py1
-rw-r--r--docs/quick_tutorial/debugtoolbar/development.ini4
-rw-r--r--docs/quick_tutorial/debugtoolbar/setup.py1
-rw-r--r--docs/quick_tutorial/forms.rst2
-rw-r--r--docs/quick_tutorial/forms/development.ini4
-rw-r--r--docs/quick_tutorial/forms/setup.py1
-rw-r--r--docs/quick_tutorial/functional_testing/development.ini4
-rw-r--r--docs/quick_tutorial/functional_testing/setup.py1
-rw-r--r--docs/quick_tutorial/hello_world/app.py5
-rw-r--r--docs/quick_tutorial/ini.rst12
-rw-r--r--docs/quick_tutorial/ini/development.ini4
-rw-r--r--docs/quick_tutorial/ini/setup.py1
-rw-r--r--docs/quick_tutorial/jinja2.rst2
-rw-r--r--docs/quick_tutorial/jinja2/development.ini4
-rw-r--r--docs/quick_tutorial/jinja2/setup.py1
-rw-r--r--docs/quick_tutorial/json/development.ini4
-rw-r--r--docs/quick_tutorial/json/setup.py1
-rw-r--r--docs/quick_tutorial/logging/development.ini4
-rw-r--r--docs/quick_tutorial/logging/setup.py1
-rw-r--r--docs/quick_tutorial/more_view_classes/development.ini4
-rw-r--r--docs/quick_tutorial/more_view_classes/setup.py1
-rw-r--r--docs/quick_tutorial/package/tutorial/app.py5
-rw-r--r--docs/quick_tutorial/request_response/development.ini4
-rw-r--r--docs/quick_tutorial/request_response/setup.py1
-rw-r--r--docs/quick_tutorial/requirements.rst9
-rw-r--r--docs/quick_tutorial/retail_forms/development.ini4
-rw-r--r--docs/quick_tutorial/retail_forms/setup.py1
-rw-r--r--docs/quick_tutorial/routing/development.ini4
-rw-r--r--docs/quick_tutorial/routing/setup.py1
-rw-r--r--docs/quick_tutorial/sessions/development.ini4
-rw-r--r--docs/quick_tutorial/sessions/setup.py1
-rw-r--r--docs/quick_tutorial/static_assets.rst11
-rw-r--r--docs/quick_tutorial/static_assets/development.ini4
-rw-r--r--docs/quick_tutorial/static_assets/setup.py1
-rw-r--r--docs/quick_tutorial/static_assets/tutorial/tests.py4
-rw-r--r--docs/quick_tutorial/templating/development.ini4
-rw-r--r--docs/quick_tutorial/templating/setup.py1
-rw-r--r--docs/quick_tutorial/unit_testing/development.ini4
-rw-r--r--docs/quick_tutorial/unit_testing/setup.py1
-rw-r--r--docs/quick_tutorial/view_classes.rst2
-rw-r--r--docs/quick_tutorial/view_classes/development.ini4
-rw-r--r--docs/quick_tutorial/view_classes/setup.py1
-rw-r--r--docs/quick_tutorial/views/development.ini4
-rw-r--r--docs/quick_tutorial/views/setup.py1
-rw-r--r--docs/tutorials/wiki/authorization.rst4
-rw-r--r--docs/tutorials/wiki/basiclayout.rst22
-rw-r--r--docs/tutorials/wiki/src/authorization/tutorial/__init__.py24
-rw-r--r--docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py18
-rw-r--r--docs/tutorials/wiki/src/installation/tutorial/__init__.py18
-rw-r--r--docs/tutorials/wiki/src/models/tutorial/__init__.py18
-rw-r--r--docs/tutorials/wiki/src/tests/tutorial/__init__.py24
-rw-r--r--docs/tutorials/wiki/src/views/tutorial/__init__.py18
62 files changed, 174 insertions, 146 deletions
diff --git a/docs/index.rst b/docs/index.rst
index 4b739d23f..3cd764b2f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -35,9 +35,6 @@ speed right away.
* :doc:`quick_tour` gives an overview of the major features in Pyramid,
covering a little about a lot.
-* :doc:`quick_tutorial/index` is similar to the Quick Tour, but in a tutorial
- format, with somewhat deeper treatment of each topic and with working code.
-
* Like learning by example? Visit the official :ref:`html_tutorials` as well as
the community-contributed :ref:`Pyramid Tutorials
<tutorials:pyramid-tutorials>` and :ref:`Pyramid Community Cookbook
@@ -53,13 +50,12 @@ speed right away.
Tutorials
=========
-Official tutorials explaining how to use :app:`Pyramid` to build various types
-of applications, and how to deploy :app:`Pyramid` applications to various
-platforms.
+Official tutorials provide a quick overview of :app:`Pyramid`'s features in more depth than the Quick Tour and with working code, explain how to use :app:`Pyramid` to build various types of applications, and how to deploy :app:`Pyramid` applications to various platforms.
.. toctree::
:maxdepth: 1
+ quick_tutorial/index
tutorials/wiki2/index
tutorials/wiki/index
tutorials/modwsgi/index
diff --git a/docs/narr/install.rst b/docs/narr/install.rst
index 61c6e6c25..a9ec68d61 100644
--- a/docs/narr/install.rst
+++ b/docs/narr/install.rst
@@ -51,7 +51,7 @@ Python comes pre-installed on Mac OS X, but due to Apple's release cycle, it is
often out of date. Unless you have a need for a specific earlier version, it is
recommended to install the latest 3.x version of Python.
-You can install the latest verion of Python for Mac OS X from the binaries on
+You can install the latest version of Python for Mac OS X from the binaries on
`python.org <https://www.python.org/downloads/mac-osx/>`_.
Alternatively, you can use the `homebrew <https://brew.sh/>`_ package manager.
diff --git a/docs/narr/security.rst b/docs/narr/security.rst
index 3a6bfa5e5..0265152fa 100644
--- a/docs/narr/security.rst
+++ b/docs/narr/security.rst
@@ -874,8 +874,8 @@ the user, and returns the token.
.. code-block:: python
- from pyramid.csrf import get_csrf_token
- token = new_csrf_token()
+ from pyramid.csrf import new_csrf_token
+ token = new_csrf_token(request)
.. note::
diff --git a/docs/quick_tour/views/views.py b/docs/quick_tour/views/views.py
index 1449cbb38..95a2b60ca 100644
--- a/docs/quick_tour/views/views.py
+++ b/docs/quick_tour/views/views.py
@@ -1,4 +1,4 @@
-import cgi
+from pyramid.compat import escape
from pyramid.httpexceptions import HTTPFound
from pyramid.response import Response
@@ -16,8 +16,8 @@ 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>'
- # cgi.escape to prevent Cross-Site Scripting (XSS) [CWE 79]
- return Response(body % cgi.escape(name))
+ # pyramid.compat.escape to prevent Cross-Site Scripting (XSS) [CWE 79]
+ return Response(body % escape(name))
# /goto which issues HTTP redirect to the last view
diff --git a/docs/quick_tutorial/authentication.rst b/docs/quick_tutorial/authentication.rst
index 892beb3ec..684cce6a6 100644
--- a/docs/quick_tutorial/authentication.rst
+++ b/docs/quick_tutorial/authentication.rst
@@ -39,7 +39,7 @@ Steps
.. literalinclude:: authentication/setup.py
:language: python
- :emphasize-lines: 5-6
+ :emphasize-lines: 7
:linenos:
#. We can now install our project in development mode:
diff --git a/docs/quick_tutorial/authentication/development.ini b/docs/quick_tutorial/authentication/development.ini
index a4586d45f..cae509542 100644
--- a/docs/quick_tutorial/authentication/development.ini
+++ b/docs/quick_tutorial/authentication/development.ini
@@ -6,5 +6,5 @@ pyramid.includes =
tutorial.secret = 98zd
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/authentication/setup.py b/docs/quick_tutorial/authentication/setup.py
index 7a6ff4226..808a6f9a9 100644
--- a/docs/quick_tutorial/authentication/setup.py
+++ b/docs/quick_tutorial/authentication/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
'bcrypt'
]
diff --git a/docs/quick_tutorial/authorization/development.ini b/docs/quick_tutorial/authorization/development.ini
index a4586d45f..cae509542 100644
--- a/docs/quick_tutorial/authorization/development.ini
+++ b/docs/quick_tutorial/authorization/development.ini
@@ -6,5 +6,5 @@ pyramid.includes =
tutorial.secret = 98zd
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/authorization/setup.py b/docs/quick_tutorial/authorization/setup.py
index 7a6ff4226..808a6f9a9 100644
--- a/docs/quick_tutorial/authorization/setup.py
+++ b/docs/quick_tutorial/authorization/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
'bcrypt'
]
diff --git a/docs/quick_tutorial/databases/development.ini b/docs/quick_tutorial/databases/development.ini
index 270643071..270cf7b63 100644
--- a/docs/quick_tutorial/databases/development.ini
+++ b/docs/quick_tutorial/databases/development.ini
@@ -8,8 +8,8 @@ pyramid.includes =
sqlalchemy.url = sqlite:///%(here)s/sqltutorial.sqlite
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
# Begin logging configuration
diff --git a/docs/quick_tutorial/databases/setup.py b/docs/quick_tutorial/databases/setup.py
index 238358fe4..66045fd7e 100644
--- a/docs/quick_tutorial/databases/setup.py
+++ b/docs/quick_tutorial/databases/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
'deform',
'sqlalchemy',
diff --git a/docs/quick_tutorial/debugtoolbar/development.ini b/docs/quick_tutorial/debugtoolbar/development.ini
index 17b479011..58d23cff7 100644
--- a/docs/quick_tutorial/debugtoolbar/development.ini
+++ b/docs/quick_tutorial/debugtoolbar/development.ini
@@ -4,5 +4,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/debugtoolbar/setup.py b/docs/quick_tutorial/debugtoolbar/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/debugtoolbar/setup.py
+++ b/docs/quick_tutorial/debugtoolbar/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/forms.rst b/docs/quick_tutorial/forms.rst
index 84ceb13d6..3c865ad09 100644
--- a/docs/quick_tutorial/forms.rst
+++ b/docs/quick_tutorial/forms.rst
@@ -41,7 +41,7 @@ Steps
pulls in Colander as a dependency:
.. literalinclude:: forms/setup.py
- :emphasize-lines: 5-6
+ :emphasize-lines: 7
:linenos:
#. We can now install our project in development mode:
diff --git a/docs/quick_tutorial/forms/development.ini b/docs/quick_tutorial/forms/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/forms/development.ini
+++ b/docs/quick_tutorial/forms/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/forms/setup.py b/docs/quick_tutorial/forms/setup.py
index 361ade013..5293ef7f0 100644
--- a/docs/quick_tutorial/forms/setup.py
+++ b/docs/quick_tutorial/forms/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
'deform'
]
diff --git a/docs/quick_tutorial/functional_testing/development.ini b/docs/quick_tutorial/functional_testing/development.ini
index 17b479011..58d23cff7 100644
--- a/docs/quick_tutorial/functional_testing/development.ini
+++ b/docs/quick_tutorial/functional_testing/development.ini
@@ -4,5 +4,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/functional_testing/setup.py b/docs/quick_tutorial/functional_testing/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/functional_testing/setup.py
+++ b/docs/quick_tutorial/functional_testing/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/hello_world/app.py b/docs/quick_tutorial/hello_world/app.py
index d0351e251..ff0b950d3 100644
--- a/docs/quick_tutorial/hello_world/app.py
+++ b/docs/quick_tutorial/hello_world/app.py
@@ -1,4 +1,4 @@
-from wsgiref.simple_server import make_server
+from waitress import serve
from pyramid.config import Configurator
from pyramid.response import Response
@@ -13,5 +13,4 @@ if __name__ == '__main__':
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
- server = make_server('0.0.0.0', 6543, app)
- server.serve_forever()
+ serve(app, host='0.0.0.0', port=6543)
diff --git a/docs/quick_tutorial/ini.rst b/docs/quick_tutorial/ini.rst
index 96dfc5b5f..f6d64eeda 100644
--- a/docs/quick_tutorial/ini.rst
+++ b/docs/quick_tutorial/ini.rst
@@ -89,7 +89,7 @@ application. Processing then proceeds as described in the Pyramid chapter on
- ``pserve`` looks for ``[app:main]`` and finds ``use = egg:tutorial``.
-- The projects's ``setup.py`` has defined an "entry point" (lines 9-12) for the
+- The projects's ``setup.py`` has defined an "entry point" (lines 10-13) for the
project's "main" entry point of ``tutorial:main``.
- The ``tutorial`` package's ``__init__`` has a ``main`` function.
@@ -99,10 +99,12 @@ application. Processing then proceeds as described in the Pyramid chapter on
The ``.ini`` file is also used for two other functions:
-- *Configuring the WSGI server*. ``[server:main]`` wires up the choice of which
- WSGI *server* for your WSGI *application*. In this case, we are using
- ``wsgiref`` bundled in the Python library. It also wires up the *port
- number*: ``port = 6543`` tells ``wsgiref`` to listen on port 6543.
+- *Configuring the WSGI server*. ``[server:main]`` wires up the choice
+ of which WSGI *server* for your WSGI *application*. In this case, we
+ are using ``waitress`` which was specified in
+ ``tutorial/setup.py``. It also wires up the *port number*:
+ ``listen = localhost:6543`` tells ``waitress`` to listen on host
+ ``localhost`` at port ``6543``.
- *Configuring Python logging*. Pyramid uses Python standard logging, which
needs a number of configuration values. The ``.ini`` serves this function.
diff --git a/docs/quick_tutorial/ini/development.ini b/docs/quick_tutorial/ini/development.ini
index cffbd66c9..5361188a3 100644
--- a/docs/quick_tutorial/ini/development.ini
+++ b/docs/quick_tutorial/ini/development.ini
@@ -2,5 +2,5 @@
use = egg:tutorial
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/ini/setup.py b/docs/quick_tutorial/ini/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/ini/setup.py
+++ b/docs/quick_tutorial/ini/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/jinja2.rst b/docs/quick_tutorial/jinja2.rst
index 2fc68827b..4faa81fc4 100644
--- a/docs/quick_tutorial/jinja2.rst
+++ b/docs/quick_tutorial/jinja2.rst
@@ -85,7 +85,7 @@ Extra credit
#. We used ``config.include`` which is an imperative configuration to get the
:term:`Configurator` to load ``pyramid_jinja2``'s configuration. What is
- another way could include it into the config?
+ another way we could include it into the config?
.. seealso:: `Jinja2 homepage <http://jinja.pocoo.org/>`_, and
:ref:`pyramid_jinja2 Overview <jinja2:overview>`
diff --git a/docs/quick_tutorial/jinja2/development.ini b/docs/quick_tutorial/jinja2/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/jinja2/development.ini
+++ b/docs/quick_tutorial/jinja2/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/jinja2/setup.py b/docs/quick_tutorial/jinja2/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/jinja2/setup.py
+++ b/docs/quick_tutorial/jinja2/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/json/development.ini b/docs/quick_tutorial/json/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/json/development.ini
+++ b/docs/quick_tutorial/json/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/json/setup.py b/docs/quick_tutorial/json/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/json/setup.py
+++ b/docs/quick_tutorial/json/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/logging/development.ini b/docs/quick_tutorial/logging/development.ini
index b869ca5b6..ff470acdb 100644
--- a/docs/quick_tutorial/logging/development.ini
+++ b/docs/quick_tutorial/logging/development.ini
@@ -5,8 +5,8 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
# Begin logging configuration
diff --git a/docs/quick_tutorial/logging/setup.py b/docs/quick_tutorial/logging/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/logging/setup.py
+++ b/docs/quick_tutorial/logging/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/more_view_classes/development.ini b/docs/quick_tutorial/more_view_classes/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/more_view_classes/development.ini
+++ b/docs/quick_tutorial/more_view_classes/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/more_view_classes/setup.py b/docs/quick_tutorial/more_view_classes/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/more_view_classes/setup.py
+++ b/docs/quick_tutorial/more_view_classes/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/package/tutorial/app.py b/docs/quick_tutorial/package/tutorial/app.py
index d0351e251..ff0b950d3 100644
--- a/docs/quick_tutorial/package/tutorial/app.py
+++ b/docs/quick_tutorial/package/tutorial/app.py
@@ -1,4 +1,4 @@
-from wsgiref.simple_server import make_server
+from waitress import serve
from pyramid.config import Configurator
from pyramid.response import Response
@@ -13,5 +13,4 @@ if __name__ == '__main__':
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
- server = make_server('0.0.0.0', 6543, app)
- server.serve_forever()
+ serve(app, host='0.0.0.0', port=6543)
diff --git a/docs/quick_tutorial/request_response/development.ini b/docs/quick_tutorial/request_response/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/request_response/development.ini
+++ b/docs/quick_tutorial/request_response/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/request_response/setup.py b/docs/quick_tutorial/request_response/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/request_response/setup.py
+++ b/docs/quick_tutorial/request_response/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/requirements.rst b/docs/quick_tutorial/requirements.rst
index 70e68514b..a65cfe6d2 100644
--- a/docs/quick_tutorial/requirements.rst
+++ b/docs/quick_tutorial/requirements.rst
@@ -189,17 +189,18 @@ Install Pyramid
---------------
We have our Python standard prerequisites out of the way. The Pyramid
-part is pretty easy.
+part is pretty easy. We'll also install a WSGI server, Waitress.
.. parsed-literal::
# Mac and Linux
- $ $VENV/bin/pip install "pyramid==\ |release|\ "
+ $ $VENV/bin/pip install "pyramid==\ |release|\ " waitress
# Windows
- c:\\> %VENV%\\Scripts\\pip install "pyramid==\ |release|\ "
+ c:\\> %VENV%\\Scripts\\pip install "pyramid==\ |release|\ " waitress
-Our Python virtual environment now has the Pyramid software available.
+Our Python virtual environment now has the Pyramid software available
+as well as the ``waitress`` package.
You can optionally install some of the extra Python packages used in this
tutorial.
diff --git a/docs/quick_tutorial/retail_forms/development.ini b/docs/quick_tutorial/retail_forms/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/retail_forms/development.ini
+++ b/docs/quick_tutorial/retail_forms/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/retail_forms/setup.py b/docs/quick_tutorial/retail_forms/setup.py
index 361ade013..5293ef7f0 100644
--- a/docs/quick_tutorial/retail_forms/setup.py
+++ b/docs/quick_tutorial/retail_forms/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
'deform'
]
diff --git a/docs/quick_tutorial/routing/development.ini b/docs/quick_tutorial/routing/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/routing/development.ini
+++ b/docs/quick_tutorial/routing/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/routing/setup.py b/docs/quick_tutorial/routing/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/routing/setup.py
+++ b/docs/quick_tutorial/routing/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/sessions/development.ini b/docs/quick_tutorial/sessions/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/sessions/development.ini
+++ b/docs/quick_tutorial/sessions/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/sessions/setup.py b/docs/quick_tutorial/sessions/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/sessions/setup.py
+++ b/docs/quick_tutorial/sessions/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/static_assets.rst b/docs/quick_tutorial/static_assets.rst
index b8482492d..81a01061a 100644
--- a/docs/quick_tutorial/static_assets.rst
+++ b/docs/quick_tutorial/static_assets.rst
@@ -43,13 +43,20 @@ Steps
.. literalinclude:: static_assets/tutorial/static/app.css
:language: css
-#. Make sure we haven't broken any existing code by running the tests:
+#. We add a functional test that asserts that the newly added static file is delivered:
+
+ .. literalinclude:: static_assets/tutorial/tests.py
+ :language: python
+ :pyobject: TutorialFunctionalTests.test_css
+ :lineno-match:
+
+#. Now run the tests:
.. code-block:: bash
$ $VENV/bin/py.test tutorial/tests.py -q
....
- 4 passed in 0.50 seconds
+ 5 passed in 0.50 seconds
#. Run your Pyramid application with:
diff --git a/docs/quick_tutorial/static_assets/development.ini b/docs/quick_tutorial/static_assets/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/static_assets/development.ini
+++ b/docs/quick_tutorial/static_assets/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/static_assets/setup.py b/docs/quick_tutorial/static_assets/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/static_assets/setup.py
+++ b/docs/quick_tutorial/static_assets/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/static_assets/tutorial/tests.py b/docs/quick_tutorial/static_assets/tutorial/tests.py
index 4381235ec..b560ddf82 100644
--- a/docs/quick_tutorial/static_assets/tutorial/tests.py
+++ b/docs/quick_tutorial/static_assets/tutorial/tests.py
@@ -42,3 +42,7 @@ class TutorialFunctionalTests(unittest.TestCase):
def test_hello(self):
res = self.testapp.get('/howdy', status=200)
self.assertIn(b'<h1>Hi Hello View', res.body)
+
+ def test_css(self):
+ res = self.testapp.get('/static/app.css', status=200)
+ self.assertIn(b'body', res.body)
diff --git a/docs/quick_tutorial/templating/development.ini b/docs/quick_tutorial/templating/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/templating/development.ini
+++ b/docs/quick_tutorial/templating/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/templating/setup.py b/docs/quick_tutorial/templating/setup.py
index 0b71b73e6..d1910178e 100644
--- a/docs/quick_tutorial/templating/setup.py
+++ b/docs/quick_tutorial/templating/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon',
]
diff --git a/docs/quick_tutorial/unit_testing/development.ini b/docs/quick_tutorial/unit_testing/development.ini
index 17b479011..58d23cff7 100644
--- a/docs/quick_tutorial/unit_testing/development.ini
+++ b/docs/quick_tutorial/unit_testing/development.ini
@@ -4,5 +4,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/unit_testing/setup.py b/docs/quick_tutorial/unit_testing/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/unit_testing/setup.py
+++ b/docs/quick_tutorial/unit_testing/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/quick_tutorial/view_classes.rst b/docs/quick_tutorial/view_classes.rst
index 05d97a9b1..49cdcddcc 100644
--- a/docs/quick_tutorial/view_classes.rst
+++ b/docs/quick_tutorial/view_classes.rst
@@ -12,7 +12,7 @@ Background
==========
So far our views have been simple, free-standing functions. Many times your
-views are related to one another. They may be different ways to look at or work
+views are related to one another. They may consist of different ways to look at or work
on the same data, or be a REST API that handles multiple operations. Grouping
these views together as a :ref:`view class <class_as_view>` makes sense:
diff --git a/docs/quick_tutorial/view_classes/development.ini b/docs/quick_tutorial/view_classes/development.ini
index 7066668bf..78d7479e7 100644
--- a/docs/quick_tutorial/view_classes/development.ini
+++ b/docs/quick_tutorial/view_classes/development.ini
@@ -5,5 +5,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/view_classes/setup.py b/docs/quick_tutorial/view_classes/setup.py
index 2221b72e9..aefa352d4 100644
--- a/docs/quick_tutorial/view_classes/setup.py
+++ b/docs/quick_tutorial/view_classes/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
'pyramid_chameleon'
]
diff --git a/docs/quick_tutorial/views/development.ini b/docs/quick_tutorial/views/development.ini
index 17b479011..58d23cff7 100644
--- a/docs/quick_tutorial/views/development.ini
+++ b/docs/quick_tutorial/views/development.ini
@@ -4,5 +4,5 @@ pyramid.includes =
pyramid_debugtoolbar
[server:main]
-use = egg:pyramid#wsgiref
-port = 6543
+use = egg:waitress#main
+listen = localhost:6543
diff --git a/docs/quick_tutorial/views/setup.py b/docs/quick_tutorial/views/setup.py
index 9997984d3..a93cf6a73 100644
--- a/docs/quick_tutorial/views/setup.py
+++ b/docs/quick_tutorial/views/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
requires = [
'pyramid',
+ 'waitress',
]
setup(name='tutorial',
diff --git a/docs/tutorials/wiki/authorization.rst b/docs/tutorials/wiki/authorization.rst
index c9ba9feb3..9a8313748 100644
--- a/docs/tutorials/wiki/authorization.rst
+++ b/docs/tutorials/wiki/authorization.rst
@@ -157,7 +157,7 @@ Now add those policies to the configuration:
.. literalinclude:: src/authorization/tutorial/__init__.py
:lines: 18-25
:lineno-match:
- :emphasize-lines: 1-3,7-8
+ :emphasize-lines: 2-4,6-7
:language: python
Only the highlighted lines need to be added.
@@ -327,7 +327,7 @@ Our ``tutorial/__init__.py`` will look like this when we're done:
.. literalinclude:: src/authorization/tutorial/__init__.py
:linenos:
- :emphasize-lines: 4-5,8,18-20,24-25
+ :emphasize-lines: 4-5,8,19-21,23-24
:language: python
Only the highlighted lines need to be added or edited.
diff --git a/docs/tutorials/wiki/basiclayout.rst b/docs/tutorials/wiki/basiclayout.rst
index f713d1057..b6363088b 100644
--- a/docs/tutorials/wiki/basiclayout.rst
+++ b/docs/tutorials/wiki/basiclayout.rst
@@ -37,20 +37,20 @@ Open ``tutorial/__init__.py``. It should already contain the following:
#. *Line 11*. ``__init__.py`` defines a function named ``main``.
-#. *Line 14*. We construct a :term:`Configurator` with a root
- factory and the settings keywords parsed by :term:`PasteDeploy`. The root
- factory is named ``root_factory``.
+#. *Line 14*. Use an explicit transaction manager for apps so that they do not implicitly create new transactions when touching the manager outside of the ``pyramid_tm`` lifecycle.
-#. *Lines 15 and 16*. Get the settings and use an explicit transaction transaction manager for apps so that they do not implicitly create new transactions when touching the manager outside of the ``pyramid_tm`` lifecycle.
+#. *Line 15*. Construct a :term:`Configurator` as a :term:`context manager` with the settings keyword parsed by :term:`PasteDeploy`.
-#. *Line 17*. Include support for the :term:`Chameleon` template rendering
+#. *Line 16*. Include support for the :term:`Chameleon` template rendering
bindings, allowing us to use the ``.pt`` templates.
-#. *Line 18*. Include support for ``pyramid_tm``, allowing Pyramid requests to join the active transaction as provided by the `transaction <https://pypi.python.org/pypi/transaction>`_ package.
+#. *Line 17*. Include support for ``pyramid_tm``, allowing Pyramid requests to join the active transaction as provided by the `transaction <https://pypi.python.org/pypi/transaction>`_ package.
-#. *Line 19*. Include support for ``pyramid_retry`` to retry a request when transient exceptions occur.
+#. *Line 18*. Include support for ``pyramid_retry`` to retry a request when transient exceptions occur.
-#. *Line 20*. Include support for ``pyramid_zodbconn``, providing integration between :term:`ZODB` and a Pyramid application.
+#. *Line 19*. Include support for ``pyramid_zodbconn``, providing integration between :term:`ZODB` and a Pyramid application.
+
+#. *Line 20*. Set a root factory using our function named ``root_factory``.
#. *Line 21*. Register a "static view", which answers requests whose URL
paths start with ``/static``, using the
@@ -65,7 +65,7 @@ Open ``tutorial/__init__.py``. It should already contain the following:
package. Alternatively the cookiecutter could have used an *absolute* asset
specification as the path (``tutorial:static``).
-#. *Line 19*. Perform a :term:`scan`. A scan will find :term:`configuration
+#. *Line 22*. Perform a :term:`scan`. A scan will find :term:`configuration
decoration`, such as view configuration decorators (e.g., ``@view_config``)
in the source code of the ``tutorial`` package and will take actions based
on these decorators. We don't pass any arguments to
@@ -74,7 +74,7 @@ Open ``tutorial/__init__.py``. It should already contain the following:
The cookiecutter could have equivalently said ``config.scan('tutorial')``, but
it chose to omit the package name argument.
-#. *Line 20*. Use the
+#. *Line 23*. Use the
:meth:`pyramid.config.Configurator.make_wsgi_app` method
to return a :term:`WSGI` application.
@@ -104,7 +104,7 @@ Here is the source for ``models.py``:
By default, set these to ``None`` to indicate that this is the
:term:`root` object.
-#. *Lines 8-14*. ``appmaker`` is used to return the *application
+#. *Lines 8-12*. ``appmaker`` is used to return the *application
root* object. It is called on *every request* to the
:app:`Pyramid` application. It also performs bootstrapping by
*creating* an application root (inside the ZODB root object) if one
diff --git a/docs/tutorials/wiki/src/authorization/tutorial/__init__.py b/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
index e584eff2b..58635ea74 100644
--- a/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
@@ -15,18 +15,18 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
+ settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
authn_policy = AuthTktAuthenticationPolicy(
'sosecret', callback=groupfinder, hashalg='sha512')
authz_policy = ACLAuthorizationPolicy()
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
- settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.set_authentication_policy(authn_policy)
- config.set_authorization_policy(authz_policy)
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.set_authentication_policy(authn_policy)
+ config.set_authorization_policy(authz_policy)
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()
diff --git a/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py b/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
index eb703e086..f2b3c9568 100644
--- a/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
@@ -11,13 +11,13 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()
diff --git a/docs/tutorials/wiki/src/installation/tutorial/__init__.py b/docs/tutorials/wiki/src/installation/tutorial/__init__.py
index eb703e086..f2b3c9568 100644
--- a/docs/tutorials/wiki/src/installation/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/installation/tutorial/__init__.py
@@ -11,13 +11,13 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()
diff --git a/docs/tutorials/wiki/src/models/tutorial/__init__.py b/docs/tutorials/wiki/src/models/tutorial/__init__.py
index eb703e086..f2b3c9568 100644
--- a/docs/tutorials/wiki/src/models/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/models/tutorial/__init__.py
@@ -11,13 +11,13 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()
diff --git a/docs/tutorials/wiki/src/tests/tutorial/__init__.py b/docs/tutorials/wiki/src/tests/tutorial/__init__.py
index e584eff2b..58635ea74 100644
--- a/docs/tutorials/wiki/src/tests/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/tests/tutorial/__init__.py
@@ -15,18 +15,18 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
+ settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
authn_policy = AuthTktAuthenticationPolicy(
'sosecret', callback=groupfinder, hashalg='sha512')
authz_policy = ACLAuthorizationPolicy()
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
- settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.set_authentication_policy(authn_policy)
- config.set_authorization_policy(authz_policy)
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.set_authentication_policy(authn_policy)
+ config.set_authorization_policy(authz_policy)
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()
diff --git a/docs/tutorials/wiki/src/views/tutorial/__init__.py b/docs/tutorials/wiki/src/views/tutorial/__init__.py
index eb703e086..f2b3c9568 100644
--- a/docs/tutorials/wiki/src/views/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/views/tutorial/__init__.py
@@ -11,13 +11,13 @@ def root_factory(request):
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
- config = Configurator(root_factory=root_factory, settings=settings)
- settings = config.get_settings()
settings['tm.manager_hook'] = 'pyramid_tm.explicit_manager'
- config.include('pyramid_chameleon')
- config.include('pyramid_tm')
- config.include('pyramid_retry')
- config.include('pyramid_zodbconn')
- config.add_static_view('static', 'static', cache_max_age=3600)
- config.scan()
- return config.make_wsgi_app()
+ with Configurator(settings=settings) as config:
+ config.include('pyramid_chameleon')
+ config.include('pyramid_tm')
+ config.include('pyramid_retry')
+ config.include('pyramid_zodbconn')
+ config.set_root_factory(root_factory)
+ config.add_static_view('static', 'static', cache_max_age=3600)
+ config.scan()
+ return config.make_wsgi_app()