summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorials/wiki')
-rw-r--r--docs/tutorials/wiki/authorization.rst30
-rw-r--r--docs/tutorials/wiki/definingviews.rst6
-rw-r--r--docs/tutorials/wiki/index.rst4
-rw-r--r--docs/tutorials/wiki/installation.rst4
-rw-r--r--docs/tutorials/wiki/src/authorization/tutorial/__init__.py4
-rw-r--r--docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py4
-rw-r--r--docs/tutorials/wiki/src/models/tutorial/__init__.py4
-rw-r--r--docs/tutorials/wiki/src/tests/tutorial/tests.py10
-rw-r--r--docs/tutorials/wiki/src/views/tutorial/__init__.py4
-rw-r--r--docs/tutorials/wiki/tests.rst2
10 files changed, 45 insertions, 27 deletions
diff --git a/docs/tutorials/wiki/authorization.rst b/docs/tutorials/wiki/authorization.rst
index de5c9486d..46c953f6d 100644
--- a/docs/tutorials/wiki/authorization.rst
+++ b/docs/tutorials/wiki/authorization.rst
@@ -32,10 +32,17 @@ Adding Authentication and Authorization Policies
We'll change our package's ``__init__.py`` file to enable an
``AuthTktAuthenticationPolicy`` and an ``ACLAuthorizationPolicy`` to enable
-declarative security checking. When you're done, your ``__init__.py`` will
-look like so:
+declarative security checking. We need to import the new policies:
+
+.. literalinclude:: src/authorization/tutorial/__init__.py
+ :lines: 4-5,8
+ :linenos:
+ :language: python
+
+Then, we'll add those policies to the configuration:
.. literalinclude:: src/authorization/tutorial/__init__.py
+ :lines: 16-18,26-28
:linenos:
:language: python
@@ -46,23 +53,30 @@ by this policy: it is required. The ``callback`` is a reference to a
``groupfinder`` function in the ``tutorial`` package's ``security.py`` file.
We haven't added that module yet, but we're about to.
+When you're done, your ``__init__.py`` will
+look like so:
+
+.. literalinclude:: src/authorization/tutorial/__init__.py
+ :linenos:
+ :language: python
+
Adding ``security.py``
~~~~~~~~~~~~~~~~~~~~~~
Add a ``security.py`` module within your package (in the same
-directory as ``__init__.py``, ``views.py``, etc) with the following
+directory as ``__init__.py``, ``views.py``, etc.) with the following
content:
.. literalinclude:: src/authorization/tutorial/security.py
:linenos:
:language: python
-The ``groupfinder`` function defined here is an authorization policy
+The ``groupfinder`` function defined here is an :term:`authentication policy`
"callback"; it is a callable that accepts a userid and a request. If the
-userid exists in the set of users known by the system, the callback will
+userid exists in the system, the callback will
return a sequence of group identifiers (or an empty sequence if the user
isn't a member of any groups). If the userid *does not* exist in the system,
-the callback will return ``None``. In a production system this data will
+the callback will return ``None``. In a production system, user and group data will
most often come from a database, but here we use "dummy" data to represent
user and groups sources. Note that the ``editor`` user is a member of the
``group:editors`` group in our dummy group data (the ``GROUPS`` data
@@ -158,7 +172,7 @@ into its template. We'll add something like this to each view body:
logged_in = authenticated_userid(request)
We'll then change the return value of each view that has an associated
-``renderer`` to pass the `resulting `logged_in`` value to the
+``renderer`` to pass the resulting ``logged_in`` value to the
template. For example:
.. ignore-next-block
@@ -277,7 +291,7 @@ as follows:
credentials with the username ``editor``, password ``editor`` will
show the edit page form being displayed.
-- After logging in (as a result of hitting an edit or add page and
+- After logging in (as a result of hitting an edit or add page and
submitting the login form with the ``editor`` credentials), we'll see
a Logout link in the upper right hand corner. When we click it,
we're logged out, and redirected back to the front page.
diff --git a/docs/tutorials/wiki/definingviews.rst b/docs/tutorials/wiki/definingviews.rst
index 92a3da09c..b111c9b4a 100644
--- a/docs/tutorials/wiki/definingviews.rst
+++ b/docs/tutorials/wiki/definingviews.rst
@@ -23,7 +23,7 @@ assumed to return a :term:`response` object.
the request as a single argument, you can obtain it via
``request.context``.
-We're going to define several :term:`view callable` functions then wire them
+We're going to define several :term:`view callable` functions, then wire them
into :app:`Pyramid` using some :term:`view configuration`.
The source code for this tutorial stage can be browsed via
@@ -204,8 +204,8 @@ the form post view callable for the form it renders. The ``context`` of the
If the view execution is *not* a result of a form submission (if the
expression ``'form.submitted' in request.params`` is ``False``), the view
-simply renders the edit form, passing the request, the page resource, and a
-save_url which will be used as the action of the generated form.
+simply renders the edit form, passing the page resource, and a ``save_url``
+which will be used as the action of the generated form.
If the view execution *is* a result of a form submission (if the expression
``'form.submitted' in request.params`` is ``True``), the view grabs the
diff --git a/docs/tutorials/wiki/index.rst b/docs/tutorials/wiki/index.rst
index c984c4f01..3edc6ba04 100644
--- a/docs/tutorials/wiki/index.rst
+++ b/docs/tutorials/wiki/index.rst
@@ -11,8 +11,8 @@ authentication.
For cut and paste purposes, the source code for all stages of this
tutorial can be browsed at
-`http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki
-<http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki>`_.
+`http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki/src/
+<http://github.com/Pylons/pyramid/tree/master/docs/tutorials/wiki/src/>`_.
.. toctree::
:maxdepth: 2
diff --git a/docs/tutorials/wiki/installation.rst b/docs/tutorials/wiki/installation.rst
index f4fb4323c..30fb67441 100644
--- a/docs/tutorials/wiki/installation.rst
+++ b/docs/tutorials/wiki/installation.rst
@@ -122,7 +122,7 @@ Preparation, Windows
.. code-block:: text
- c:\pyramidtut> Scripts\easy_install docutils repoze.tm2 \
+ c:\pyramidtut> Scripts\easy_install docutils repoze.tm2 ^
repoze.zodbconn nose coverage
.. _making_a_project:
@@ -234,7 +234,7 @@ On Windows:
.. code-block:: text
- c:\pyramidtut\tutorial> ..\Scripts\nosetests --cover-package=tutorial \
+ c:\pyramidtut\tutorial> ..\Scripts\nosetests --cover-package=tutorial ^
--cover-erase --with-coverage
Looks like the code in the ``pyramid_zodb`` scaffold for ZODB projects is
diff --git a/docs/tutorials/wiki/src/authorization/tutorial/__init__.py b/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
index 3e9266754..f7dab5f47 100644
--- a/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/authorization/tutorial/__init__.py
@@ -16,8 +16,8 @@ def main(global_config, **settings):
authn_policy = AuthTktAuthenticationPolicy(secret='sosecret',
callback=groupfinder)
authz_policy = ACLAuthorizationPolicy()
- zodb_uri = settings.get('zodb_uri')
- if zodb_uri is None:
+ zodb_uri = settings.get('zodb_uri', False)
+ if zodb_uri is False:
raise ValueError("No 'zodb_uri' in application configuration.")
finder = PersistentApplicationFinder(zodb_uri, appmaker)
diff --git a/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py b/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
index a9f776980..6a4093a3b 100644
--- a/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/basiclayout/tutorial/__init__.py
@@ -5,8 +5,8 @@ from tutorial.models import appmaker
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
- zodb_uri = settings.get('zodb_uri')
- if zodb_uri is None:
+ zodb_uri = settings.get('zodb_uri', False)
+ if zodb_uri is False:
raise ValueError("No 'zodb_uri' in application configuration.")
finder = PersistentApplicationFinder(zodb_uri, appmaker)
diff --git a/docs/tutorials/wiki/src/models/tutorial/__init__.py b/docs/tutorials/wiki/src/models/tutorial/__init__.py
index bf0f683bf..73fc81d23 100644
--- a/docs/tutorials/wiki/src/models/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/models/tutorial/__init__.py
@@ -5,8 +5,8 @@ from tutorial.models import appmaker
def main(global_config, **settings):
""" This function returns a WSGI application.
"""
- zodb_uri = settings.get('zodb_uri')
- if zodb_uri is None:
+ zodb_uri = settings.get('zodb_uri', False)
+ if zodb_uri is False:
raise ValueError("No 'zodb_uri' in application configuration.")
finder = PersistentApplicationFinder(zodb_uri, appmaker)
diff --git a/docs/tutorials/wiki/src/tests/tutorial/tests.py b/docs/tutorials/wiki/src/tests/tutorial/tests.py
index d9ff866f1..0ce5ea718 100644
--- a/docs/tutorials/wiki/src/tests/tutorial/tests.py
+++ b/docs/tutorials/wiki/src/tests/tutorial/tests.py
@@ -139,16 +139,20 @@ class FunctionalTests(unittest.TestCase):
self.tmpdir = tempfile.mkdtemp()
dbpath = os.path.join( self.tmpdir, 'test.db')
- settings = { 'zodb_uri' : 'file://' + dbpath }
+ from repoze.zodbconn.uri import db_from_uri
+ db = db_from_uri('file://' + dbpath)
+ settings = { 'zodb_uri' : None }
app = main({}, **settings)
- from repoze.zodbconn.middleware import EnvironmentDeleterMiddleware
- app = EnvironmentDeleterMiddleware(app)
+ from repoze.zodbconn.connector import Connector
+ app = Connector(app, db)
+ self.db = db
from webtest import TestApp
self.testapp = TestApp(app)
def tearDown(self):
import shutil
+ self.db.close()
shutil.rmtree( self.tmpdir )
def test_root(self):
diff --git a/docs/tutorials/wiki/src/views/tutorial/__init__.py b/docs/tutorials/wiki/src/views/tutorial/__init__.py
index 91f7c2624..04a01fead 100644
--- a/docs/tutorials/wiki/src/views/tutorial/__init__.py
+++ b/docs/tutorials/wiki/src/views/tutorial/__init__.py
@@ -5,8 +5,8 @@ from tutorial.models import appmaker
def main(global_config, **settings):
""" This function returns a WSGI application.
"""
- zodb_uri = settings.get('zodb_uri')
- if zodb_uri is None:
+ zodb_uri = settings.get('zodb_uri', False)
+ if zodb_uri is False:
raise ValueError("No 'zodb_uri' in application configuration.")
finder = PersistentApplicationFinder(zodb_uri, appmaker)
diff --git a/docs/tutorials/wiki/tests.rst b/docs/tutorials/wiki/tests.rst
index f3151dbcc..c843a0129 100644
--- a/docs/tutorials/wiki/tests.rst
+++ b/docs/tutorials/wiki/tests.rst
@@ -73,6 +73,6 @@ The expected result looks something like:
.........
----------------------------------------------------------------------
- Ran 9 tests in 0.203s
+ Ran 23 tests in 1.653s
OK