summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki2
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorials/wiki2')
-rw-r--r--docs/tutorials/wiki2/background.rst4
-rw-r--r--docs/tutorials/wiki2/basiclayout.rst118
-rw-r--r--docs/tutorials/wiki2/definingmodels.rst48
-rw-r--r--docs/tutorials/wiki2/distributing.rst16
-rw-r--r--docs/tutorials/wiki2/installation.rst222
-rw-r--r--docs/tutorials/wiki2/tests.rst35
6 files changed, 221 insertions, 222 deletions
diff --git a/docs/tutorials/wiki2/background.rst b/docs/tutorials/wiki2/background.rst
index ee7dfe36f..c14d3cb7d 100644
--- a/docs/tutorials/wiki2/background.rst
+++ b/docs/tutorials/wiki2/background.rst
@@ -11,8 +11,8 @@ familiar to someone with SQL database experience. It uses
URLs to code. It can also be followed by people without any prior
Python web framework experience.
-To code along with this tutorial, the developer will need a UNIX
-machine with development tools (Mac OS X with XCode, any Linux or BSD
+To code along with this tutorial, the developer will need a Unix
+machine with development tools (macOS with XCode, any Linux or BSD
variant, etc.) *or* a Windows system of any kind.
.. note::
diff --git a/docs/tutorials/wiki2/basiclayout.rst b/docs/tutorials/wiki2/basiclayout.rst
index 233231f8d..313b5998e 100644
--- a/docs/tutorials/wiki2/basiclayout.rst
+++ b/docs/tutorials/wiki2/basiclayout.rst
@@ -21,24 +21,24 @@ code.
Open ``tutorial/__init__.py``. It should already contain the following:
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
Let's go over this piece-by-piece. First we need some imports to support later
code:
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :end-before: main
- :lineno-match:
- :language: py
+ :end-before: main
+ :lineno-match:
+ :language: py
``__init__.py`` defines a function named ``main``. Here is the entirety of
the ``main`` function we've defined in our ``__init__.py``:
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :pyobject: main
- :lineno-match:
- :language: py
+ :pyobject: main
+ :lineno-match:
+ :language: py
When you invoke the ``pserve development.ini`` command, the ``main`` function
above is executed. It accepts some settings and returns a :term:`WSGI`
@@ -47,9 +47,9 @@ application. (See :ref:`startup_chapter` for more about ``pserve``.)
Next in ``main``, construct a :term:`Configurator` object:
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 7
- :lineno-match:
- :language: py
+ :lines: 7
+ :lineno-match:
+ :language: py
``settings`` is passed to the ``Configurator`` as a keyword argument with the
dictionary values passed as the ``**settings`` argument. This will be a
@@ -61,25 +61,25 @@ Next include :term:`Jinja2` templating bindings so that we can use renderers
with the ``.jinja2`` extension within our project.
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 8
- :lineno-match:
- :language: py
+ :lines: 8
+ :lineno-match:
+ :language: py
Next include the the package ``models`` using a dotted Python path. The exact
setup of the models will be covered later.
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 9
- :lineno-match:
- :language: py
+ :lines: 9
+ :lineno-match:
+ :language: py
Next include the ``routes`` module using a dotted Python path. This module will
be explained in the next section.
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 10
- :lineno-match:
- :language: py
+ :lines: 10
+ :lineno-match:
+ :language: py
.. note::
@@ -95,18 +95,18 @@ will be registered, allowing one of our application URLs to be mapped to some
code.
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 11
- :lineno-match:
- :language: py
+ :lines: 11
+ :lineno-match:
+ :language: py
Finally ``main`` is finished configuring things, so it uses the
:meth:`pyramid.config.Configurator.make_wsgi_app` method to return a
:term:`WSGI` application:
.. literalinclude:: src/basiclayout/tutorial/__init__.py
- :lines: 12
- :lineno-match:
- :language: py
+ :lines: 12
+ :lineno-match:
+ :language: py
Route declarations
@@ -115,8 +115,8 @@ Route declarations
Open the ``tutorial/routes.py`` file. It should already contain the following:
.. literalinclude:: src/basiclayout/tutorial/routes.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
On line 2, we call :meth:`pyramid.config.Configurator.add_static_view` with
three arguments: ``static`` (the name), ``static`` (the path), and
@@ -151,8 +151,8 @@ Open ``tutorial/views/default.py`` in the ``views`` package. It should already
contain the following:
.. literalinclude:: src/basiclayout/tutorial/views/default.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
The important part here is that the ``@view_config`` decorator associates the
function it decorates (``my_view``) with a :term:`view configuration`,
@@ -195,17 +195,17 @@ First, open ``tutorial/models/meta.py``, which should already contain the
following:
.. literalinclude:: src/basiclayout/tutorial/models/meta.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
``meta.py`` contains imports and support code for defining the models. We
create a dictionary ``NAMING_CONVENTION`` as well for consistent naming of
support objects like indices and constraints.
.. literalinclude:: src/basiclayout/tutorial/models/meta.py
- :end-before: metadata
- :linenos:
- :language: py
+ :end-before: metadata
+ :linenos:
+ :language: py
Next we create a ``metadata`` object from the class
:class:`sqlalchemy.schema.MetaData`, using ``NAMING_CONVENTION`` as the value
@@ -218,25 +218,25 @@ will attach the tables to the ``metadata`` we created, and define our
application's database schema.
.. literalinclude:: src/basiclayout/tutorial/models/meta.py
- :lines: 15-16
- :lineno-match:
- :language: py
+ :lines: 15-16
+ :lineno-match:
+ :language: py
Next open ``tutorial/models/mymodel.py``, which should already contain the
following:
.. literalinclude:: src/basiclayout/tutorial/models/mymodel.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
Notice we've defined the ``models`` as a package to make it straightforward for
defining models in separate modules. To give a simple example of a model class,
we have defined one named ``MyModel`` in ``mymodel.py``:
.. literalinclude:: src/basiclayout/tutorial/models/mymodel.py
- :pyobject: MyModel
- :lineno-match:
- :language: py
+ :pyobject: MyModel
+ :lineno-match:
+ :language: py
Our example model does not require an ``__init__`` method because SQLAlchemy
supplies for us a default constructor, if one is not already present, which
@@ -244,9 +244,9 @@ accepts keyword arguments of the same name as that of the mapped attributes.
.. note:: Example usage of MyModel:
- .. code-block:: python
+ .. code-block:: python
- johnny = MyModel(name="John Doe", value=10)
+ johnny = MyModel(name="John Doe", value=10)
The ``MyModel`` class has a ``__tablename__`` attribute. This informs
SQLAlchemy which table to use to store the data representing instances of this
@@ -256,8 +256,8 @@ Finally, open ``tutorial/models/__init__.py``, which should already
contain the following:
.. literalinclude:: src/basiclayout/tutorial/models/__init__.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
Our ``models/__init__.py`` module defines the primary API we will use for
configuring the database connections within our application, and it contains
@@ -286,9 +286,9 @@ database engine using :func:`sqlalchemy.engine_from_config` from the
``[app:main]`` section. This setting is a URI (something like ``sqlite://``).
.. literalinclude:: src/basiclayout/tutorial/models/__init__.py
- :pyobject: get_engine
- :lineno-match:
- :language: py
+ :pyobject: get_engine
+ :lineno-match:
+ :language: py
The function ``get_session_factory`` accepts an :term:`SQLAlchemy` database
engine, and creates a ``session_factory`` from the :term:`SQLAlchemy` class
@@ -296,9 +296,9 @@ engine, and creates a ``session_factory`` from the :term:`SQLAlchemy` class
used for creating sessions bound to the database engine.
.. literalinclude:: src/basiclayout/tutorial/models/__init__.py
- :pyobject: get_session_factory
- :lineno-match:
- :language: py
+ :pyobject: get_session_factory
+ :lineno-match:
+ :language: py
The function ``get_tm_session`` registers a database session with a transaction
manager, and returns a ``dbsession`` object. With the transaction manager, our
@@ -306,9 +306,9 @@ application will automatically issue a transaction commit after every request,
unless an exception is raised, in which case the transaction will be aborted.
.. literalinclude:: src/basiclayout/tutorial/models/__init__.py
- :pyobject: get_tm_session
- :lineno-match:
- :language: py
+ :pyobject: get_tm_session
+ :lineno-match:
+ :language: py
Finally, we define an ``includeme`` function, which is a hook for use with
:meth:`pyramid.config.Configurator.include` to activate code in a Pyramid
@@ -319,9 +319,9 @@ define a ``request.dbsession`` property, which we can use to do work on behalf
of an incoming request to our application.
.. literalinclude:: src/basiclayout/tutorial/models/__init__.py
- :pyobject: includeme
- :lineno-match:
- :language: py
+ :pyobject: includeme
+ :lineno-match:
+ :language: py
That's about all there is to it regarding models, views, and initialization
code in our stock application.
diff --git a/docs/tutorials/wiki2/definingmodels.rst b/docs/tutorials/wiki2/definingmodels.rst
index c22fd2b61..9159027c4 100644
--- a/docs/tutorials/wiki2/definingmodels.rst
+++ b/docs/tutorials/wiki2/definingmodels.rst
@@ -32,9 +32,9 @@ parameter in the ``setup()`` function.
Open ``tutorial/setup.py`` and edit it to look like the following:
.. literalinclude:: src/models/setup.py
- :linenos:
- :emphasize-lines: 13
- :language: python
+ :linenos:
+ :emphasize-lines: 13
+ :language: python
Only the highlighted line needs to be added.
@@ -53,17 +53,17 @@ the newly added dependency distribution.
Make sure your current working directory is the root of the project (the
directory in which ``setup.py`` lives) and execute the following command.
-On UNIX:
+On Unix:
.. code-block:: bash
- $ $VENV/bin/pip install -e .
+ $VENV/bin/pip install -e .
On Windows:
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\pip install -e .
+ %VENV%\Scripts\pip install -e .
Success executing this command will end with a line to the console something
like the following.
@@ -86,8 +86,8 @@ Add ``user.py``
Create a new file ``tutorial/models/user.py`` with the following contents:
.. literalinclude:: src/models/tutorial/models/user.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
This is a very basic model for a user who can authenticate with our wiki.
@@ -125,8 +125,8 @@ Add ``page.py``
Create a new file ``tutorial/models/page.py`` with the following contents:
.. literalinclude:: src/models/tutorial/models/page.py
- :linenos:
- :language: py
+ :linenos:
+ :language: py
As you can see, our ``Page`` class is very similar to the ``User`` defined
above, except with attributes focused on storing information about a wiki page,
@@ -151,9 +151,9 @@ Open the ``tutorial/models/__init__.py`` file and edit it to look like
the following:
.. literalinclude:: src/models/tutorial/models/__init__.py
- :linenos:
- :language: py
- :emphasize-lines: 8,9
+ :linenos:
+ :language: py
+ :emphasize-lines: 8,9
Here we align our imports with the names of the models, ``Page`` and ``User``.
@@ -165,21 +165,21 @@ Migrate the database with Alembic
Now that we have written our models, we need to modify the database schema to reflect the changes to our code. Let's generate a new revision, then upgrade the database to the latest revision (head).
-On UNIX:
+On Unix:
.. code-block:: bash
- $ $VENV/bin/alembic -c development.ini revision --autogenerate \
- -m "use new models Page and User"
- $ $VENV/bin/alembic -c development.ini upgrade head
+ $VENV/bin/alembic -c development.ini revision --autogenerate \
+ -m "use new models Page and User"
+ $VENV/bin/alembic -c development.ini upgrade head
On Windows:
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\alembic -c development.ini revision \
- --autogenerate -m "use new models Page and User"
- c:\tutorial> %VENV%\Scripts\alembic -c development.ini upgrade head
+ %VENV%\Scripts\alembic -c development.ini revision \
+ --autogenerate -m "use new models Page and User"
+ %VENV%\Scripts\alembic -c development.ini upgrade head
Success executing these commands will generate output similar to the following.
@@ -308,9 +308,9 @@ Open ``tutorial/scripts/initialize_db.py`` and edit it to look like the
following:
.. literalinclude:: src/models/tutorial/scripts/initialize_db.py
- :linenos:
- :language: python
- :emphasize-lines: 11-24
+ :linenos:
+ :language: python
+ :emphasize-lines: 11-24
Only the highlighted lines need to be changed.
@@ -351,6 +351,6 @@ your console that ends with this exception:
.. code-block:: text
- AttributeError: module 'tutorial.models' has no attribute 'MyModel'
+ AttributeError: module 'tutorial.models' has no attribute 'MyModel'
This will also happen if you attempt to run the tests.
diff --git a/docs/tutorials/wiki2/distributing.rst b/docs/tutorials/wiki2/distributing.rst
index d296363ed..0eff63461 100644
--- a/docs/tutorials/wiki2/distributing.rst
+++ b/docs/tutorials/wiki2/distributing.rst
@@ -9,27 +9,27 @@ using the ``setup.py sdist`` command. The following commands assume your
current working directory contains the ``tutorial`` package and the
``setup.py`` file.
-On UNIX:
+On Unix:
.. code-block:: bash
- $ $VENV/bin/python setup.py sdist
+ $VENV/bin/python setup.py sdist
On Windows:
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\python setup.py sdist
+ %VENV%\Scripts\python setup.py sdist
The output of such a command will be something like:
.. code-block:: text
- running sdist
- # more output
- creating dist
- Creating tar archive
- removing 'tutorial-0.0' (and everything under it)
+ running sdist
+ # more output
+ creating dist
+ Creating tar archive
+ removing 'tutorial-0.0' (and everything under it)
Note that this command creates a tarball in the ``dist`` subdirectory named
``tutorial-0.0.tar.gz``. You can send this file to your friends to show them
diff --git a/docs/tutorials/wiki2/installation.rst b/docs/tutorials/wiki2/installation.rst
index 9b89327cb..1fa7e21d7 100644
--- a/docs/tutorials/wiki2/installation.rst
+++ b/docs/tutorials/wiki2/installation.rst
@@ -24,7 +24,7 @@ If you need to install the SQLite3 packages, then, for example, using the Debian
.. code-block:: bash
- $ sudo apt-get install libsqlite3-dev
+ sudo apt-get install libsqlite3-dev
Install cookiecutter
@@ -35,23 +35,23 @@ We will use a :term:`cookiecutter` to create a Python package project from a Pyt
Generate a Pyramid project from a cookiecutter
----------------------------------------------
-We will create a Pyramid project in your home directory for UNIX or at the root for Windows. It is assumed you know the path to where you installed ``cookiecutter``. Issue the following commands and override the defaults in the prompts as follows.
+We will create a Pyramid project in your home directory for Unix or at the root for Windows. It is assumed you know the path to where you installed ``cookiecutter``. Issue the following commands and override the defaults in the prompts as follows.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ cd ~
- $ cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout master
+ cd ~
+ cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout master
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\> cd \
- c:\> cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout master
+ cd \
+ cookiecutter gh:Pylons/pyramid-cookiecutter-alchemy --checkout master
On all operating systems
^^^^^^^^^^^^^^^^^^^^^^^^
@@ -67,19 +67,19 @@ If prompted for the first item, accept the default ``yes`` by hitting return.
Change directory into your newly created project
------------------------------------------------
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ cd tutorial
+ cd tutorial
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\> cd tutorial
+ cd tutorial
Set and use a ``VENV`` environment variable
@@ -87,30 +87,30 @@ Set and use a ``VENV`` environment variable
We will set the ``VENV`` environment variable to the absolute path of the virtual environment, and use it going forward.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ export VENV=~/tutorial
+ export VENV=~/tutorial
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> set VENV=c:\tutorial
+ set VENV=c:\tutorial
Create a virtual environment
----------------------------
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ python3 -m venv $VENV
+ python3 -m venv $VENV
On Windows
^^^^^^^^^^
@@ -121,31 +121,31 @@ Python 2.7:
.. code-block:: doscon
- c:\tutorial> c:\Python27\Scripts\virtualenv %VENV%
+ c:\Python27\Scripts\virtualenv %VENV%
Python 3.6:
.. code-block:: doscon
- c:\tutorial> python -m venv %VENV%
+ python -m venv %VENV%
Upgrade packaging tools in the virtual environment
--------------------------------------------------
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/pip install --upgrade pip setuptools
+ $VENV/bin/pip install --upgrade pip setuptools
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\pip install --upgrade pip setuptools
+ %VENV%\Scripts\pip install --upgrade pip setuptools
.. _installing_project_in_dev_mode:
@@ -155,19 +155,19 @@ Installing the project in development mode
In order to do development on the project easily, you must "register" the project as a development egg in your workspace. We will install testing requirements at the same time. We do so with the following command.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/pip install -e ".[testing]"
+ $VENV/bin/pip install -e ".[testing]"
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\pip install -e ".[testing]"
+ %VENV%\Scripts\pip install -e ".[testing]"
On all operating systems
^^^^^^^^^^^^^^^^^^^^^^^^
@@ -188,14 +188,14 @@ The console will show ``pip`` checking for packages and installing missing packa
Testing requirements are defined in our project's ``setup.py`` file, in the ``tests_require`` and ``extras_require`` stanzas.
.. literalinclude:: src/installation/setup.py
- :language: python
- :lineno-match:
- :lines: 24-28
+ :language: python
+ :lineno-match:
+ :lines: 24-28
.. literalinclude:: src/installation/setup.py
- :language: python
- :lineno-match:
- :lines: 48-50
+ :language: python
+ :lineno-match:
+ :lines: 48-50
.. _initialize_db_wiki2:
@@ -207,93 +207,93 @@ We use :term:`Alembic` to manage our database initialization and migrations.
Generate your first revision.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/alembic -c development.ini revision --autogenerate -m "init"
+ $VENV/bin/alembic -c development.ini revision --autogenerate -m "init"
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\alembic -c development.ini revision --autogenerate -m "init"
+ %VENV%\Scripts\alembic -c development.ini revision --autogenerate -m "init"
The output to your console should be something like this:
.. code-block:: text
- 2018-06-22 17:57:31,587 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:31,587 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:31,588 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:31,588 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:31,589 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
- 2018-06-22 17:57:31,589 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
- 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1151][MainThread]
- CREATE TABLE alembic_version (
+ 2018-06-22 17:57:31,587 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:31,587 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:31,588 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:31,588 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:31,589 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
+ 2018-06-22 17:57:31,589 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
+ 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:31,590 INFO [sqlalchemy.engine.base.Engine:1151][MainThread]
+ CREATE TABLE alembic_version (
version_num VARCHAR(32) NOT NULL,
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
- )
+ )
- 2018-06-22 17:57:31,591 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:31,591 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
- 2018-06-22 17:57:31,594 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] SELECT name FROM sqlite_master WHERE type='table' ORDER BY name
- 2018-06-22 17:57:31,594 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:31,591 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:31,591 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
+ 2018-06-22 17:57:31,594 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] SELECT name FROM sqlite_master WHERE type='table' ORDER BY name
+ 2018-06-22 17:57:31,594 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
Generating /<somepath>/tutorial/alembic/versions/20180622_bab5a278ce04.py ... done
Upgrade to that revision.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/alembic -c development.ini upgrade head
+ $VENV/bin/alembic -c development.ini upgrade head
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\alembic -c development.ini upgrade head
+ %VENV%\Scripts\alembic -c development.ini upgrade head
The output to your console should be something like this:
.. code-block:: text
- 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:37,816 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
- 2018-06-22 17:57:37,816 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] SELECT alembic_version.version_num
- FROM alembic_version
- 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
- 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,819 INFO [sqlalchemy.engine.base.Engine:1151][MainThread]
- CREATE TABLE models (
+ 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:37,814 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:37,816 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
+ 2018-06-22 17:57:37,816 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] SELECT alembic_version.version_num
+ FROM alembic_version
+ 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] PRAGMA table_info("alembic_version")
+ 2018-06-22 17:57:37,817 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,819 INFO [sqlalchemy.engine.base.Engine:1151][MainThread]
+ CREATE TABLE models (
id INTEGER NOT NULL,
name TEXT,
value INTEGER,
CONSTRAINT pk_models PRIMARY KEY (id)
- )
+ )
- 2018-06-22 17:57:37,820 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,822 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
- 2018-06-22 17:57:37,824 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] CREATE UNIQUE INDEX my_index ON models (name)
- 2018-06-22 17:57:37,824 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
- 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] INSERT INTO alembic_version (version_num) VALUES ('bab5a278ce04')
- 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
- 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
+ 2018-06-22 17:57:37,820 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,822 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
+ 2018-06-22 17:57:37,824 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] CREATE UNIQUE INDEX my_index ON models (name)
+ 2018-06-22 17:57:37,824 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
+ 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] INSERT INTO alembic_version (version_num) VALUES ('bab5a278ce04')
+ 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ()
+ 2018-06-22 17:57:37,825 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
.. _load_data_wiki2:
@@ -303,32 +303,32 @@ Load default data
Load default data into the database using a :term:`console script`. Type the following command, making sure you are still in the ``tutorial`` directory (the directory with a ``development.ini`` in it):
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/initialize_tutorial_db development.ini
+ $VENV/bin/initialize_tutorial_db development.ini
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\initialize_tutorial_db development.ini
+ %VENV%\Scripts\initialize_tutorial_db development.ini
The output to your console should be something like this:
.. code-block:: bash
- 2018-06-22 17:57:46,241 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:46,241 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:46,242 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
- 2018-06-22 17:57:46,242 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
- 2018-06-22 17:57:46,243 INFO [sqlalchemy.engine.base.Engine:682][MainThread] BEGIN (implicit)
- 2018-06-22 17:57:46,244 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] INSERT INTO models (name, value) VALUES (?, ?)
- 2018-06-22 17:57:46,245 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ('one', 1)
- 2018-06-22 17:57:46,246 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
+ 2018-06-22 17:57:46,241 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:46,241 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:46,242 INFO [sqlalchemy.engine.base.Engine:1254][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
+ 2018-06-22 17:57:46,242 INFO [sqlalchemy.engine.base.Engine:1255][MainThread] ()
+ 2018-06-22 17:57:46,243 INFO [sqlalchemy.engine.base.Engine:682][MainThread] BEGIN (implicit)
+ 2018-06-22 17:57:46,244 INFO [sqlalchemy.engine.base.Engine:1151][MainThread] INSERT INTO models (name, value) VALUES (?, ?)
+ 2018-06-22 17:57:46,245 INFO [sqlalchemy.engine.base.Engine:1154][MainThread] ('one', 1)
+ 2018-06-22 17:57:46,246 INFO [sqlalchemy.engine.base.Engine:722][MainThread] COMMIT
Success! You should now have a ``tutorial.sqlite`` file in your current
working directory. This is an SQLite database with a single table defined in it
@@ -345,26 +345,26 @@ requirements, you may run the tests for the project. The following commands
provide options to py.test that specify the module for which its tests shall be
run, and to run py.test in quiet mode.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/py.test -q
+ $VENV/bin/py.test -q
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\py.test -q
+ %VENV%\Scripts\py.test -q
For a successful test run, you should see output that ends like this:
.. code-block:: bash
- ..
- 2 passed in 0.44 seconds
+ ..
+ 2 passed in 0.44 seconds
Expose test coverage information
@@ -378,19 +378,19 @@ tests.
We've already installed the ``pytest-cov`` package into our virtual
environment, so we can run the tests with coverage.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/py.test --cov --cov-report=term-missing
+ $VENV/bin/py.test --cov --cov-report=term-missing
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\py.test --cov --cov-report=term-missing
+ c:\tutorial> %VENV%\Scripts\py.test --cov --cov-report=term-missing
If successful, you will see output something like this:
@@ -404,20 +404,20 @@ If successful, you will see output something like this:
tutorial/tests.py ..
------------------ coverage: platform Python 3.6.5 ------------------
- Name Stmts Miss Cover Missing
- -----------------------------------------------------------------
- tutorial/__init__.py 8 6 25% 7-12
- tutorial/models/__init__.py 24 0 100%
- tutorial/models/meta.py 5 0 100%
- tutorial/models/mymodel.py 8 0 100%
- tutorial/routes.py 3 3 0% 1-3
- tutorial/scripts/__init__.py 0 0 100%
- tutorial/scripts/initialize_db.py 24 24 0% 1-34
- tutorial/views/__init__.py 0 0 100%
- tutorial/views/default.py 12 0 100%
- tutorial/views/notfound.py 4 4 0% 1-7
- -----------------------------------------------------------------
- TOTAL 88 37 58%
+ Name Stmts Miss Cover Missing
+ -----------------------------------------------------------------
+ tutorial/__init__.py 8 6 25% 7-12
+ tutorial/models/__init__.py 24 0 100%
+ tutorial/models/meta.py 5 0 100%
+ tutorial/models/mymodel.py 8 0 100%
+ tutorial/routes.py 3 3 0% 1-3
+ tutorial/scripts/__init__.py 0 0 100%
+ tutorial/scripts/initialize_db.py 24 24 0% 1-34
+ tutorial/views/__init__.py 0 0 100%
+ tutorial/views/default.py 12 0 100%
+ tutorial/views/notfound.py 4 4 0% 1-7
+ -----------------------------------------------------------------
+ TOTAL 88 37 58%
===================== 2 passed in 0.57 seconds ======================
@@ -434,19 +434,19 @@ These configuration files are ``pytest.ini`` and ``.coveragerc``, located at
the root of your package. Without these defaults, we would need to specify the
path to the module on which we want to run tests and coverage.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/py.test --cov=tutorial tutorial/tests.py -q
+ $VENV/bin/py.test --cov=tutorial tutorial/tests.py -q
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\py.test --cov=tutorial tutorial\tests.py -q
+ %VENV%\Scripts\py.test --cov=tutorial tutorial\tests.py -q
py.test follows :ref:`conventions for Python test discovery
<pytest:test discovery>`, and the configuration defaults from the cookiecutter
@@ -465,19 +465,19 @@ Start the application
Start the application. See :ref:`what_is_this_pserve_thing` for more
information on ``pserve``.
-On UNIX
+On Unix
^^^^^^^
.. code-block:: bash
- $ $VENV/bin/pserve development.ini --reload
+ $VENV/bin/pserve development.ini --reload
On Windows
^^^^^^^^^^
.. code-block:: doscon
- c:\tutorial> %VENV%\Scripts\pserve development.ini --reload
+ %VENV%\Scripts\pserve development.ini --reload
.. note::
diff --git a/docs/tutorials/wiki2/tests.rst b/docs/tutorials/wiki2/tests.rst
index 84b123df1..f3f89fe9c 100644
--- a/docs/tutorials/wiki2/tests.rst
+++ b/docs/tutorials/wiki2/tests.rst
@@ -53,33 +53,32 @@ View the results of all our edits to ``tests`` subpackage
Create ``tutorial/tests/test_views.py`` such that it appears as follows:
.. literalinclude:: src/tests/tutorial/tests/test_views.py
- :linenos:
- :language: python
+ :linenos:
+ :language: python
Create ``tutorial/tests/test_functional.py`` such that it appears as follows:
.. literalinclude:: src/tests/tutorial/tests/test_functional.py
- :linenos:
- :language: python
+ :linenos:
+ :language: python
Create ``tutorial/tests/test_initdb.py`` such that it appears as follows:
.. literalinclude:: src/tests/tutorial/tests/test_initdb.py
- :linenos:
- :language: python
+ :linenos:
+ :language: python
Create ``tutorial/tests/test_security.py`` such that it appears as follows:
.. literalinclude:: src/tests/tutorial/tests/test_security.py
- :linenos:
- :language: python
+ :linenos:
+ :language: python
Create ``tutorial/tests/test_user_model.py`` such that it appears as follows:
.. literalinclude:: src/tests/tutorial/tests/test_user_model.py
- :linenos:
- :language: python
-
+ :linenos:
+ :language: python
.. note::
@@ -95,25 +94,25 @@ Running the tests
We can run these tests similarly to how we did in :ref:`running_tests`, but first delete the SQLite database ``tutorial.sqlite``. If you do not delete the database, then you will see an integrity error when running the tests.
-On UNIX:
+On Unix:
.. code-block:: bash
- $ rm tutorial.sqlite
- $ $VENV/bin/py.test -q
+ rm tutorial.sqlite
+ $VENV/bin/py.test -q
On Windows:
.. code-block:: doscon
- c:\tutorial> del tutorial.sqlite
- c:\tutorial> %VENV%\Scripts\py.test -q
+ del tutorial.sqlite
+ %VENV%\Scripts\py.test -q
The expected result should look like the following:
.. code-block:: text
- ................................
- 32 passed in 9.90 seconds
+ ................................
+ 32 passed in 9.90 seconds
.. _webtest: https://docs.pylonsproject.org/projects/webtest/en/latest/