Steve Piercy
2018-06-29 0d08c32d4ae73d57f1695e97b3c8605ccfa06ebc
Synch up src files and update definingviews.rst
1 files deleted
5 files added
9 files modified
270 ■■■■ changed files
docs/tutorials/wiki2/definingviews.rst 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/.gitignore 21 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/README.txt 12 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/development.ini 6 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/production.ini 6 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/pytest.ini 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/setup.py 5 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/alembic/env.py 58 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/alembic/script.py.mako 24 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/alembic/versions/README.txt 1 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/models/__init__.py 4 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/scripts/initialize_db.py 56 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/scripts/initializedb.py 57 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/templates/layout.jinja2 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki2/src/views/tutorial/views/default.py 14 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/definingviews.rst
@@ -126,7 +126,7 @@
.. literalinclude:: src/views/tutorial/views/default.py
   :linenos:
   :language: python
   :emphasize-lines: 1-9,12-
   :emphasize-lines: 1-9,14-
The highlighted lines need to be added or edited.
docs/tutorials/wiki2/src/views/.gitignore
New file
@@ -0,0 +1,21 @@
*.egg
*.egg-info
*.pyc
*$py.class
*~
.coverage
coverage.xml
build/
dist/
.tox/
nosetests.xml
env*/
tmp/
Data.fs*
*.sublime-project
*.sublime-workspace
.*.sw?
.sw?
.DS_Store
coverage
test
docs/tutorials/wiki2/src/views/README.txt
@@ -20,7 +20,17 @@
    env/bin/pip install -e ".[testing]"
- Configure the database.
- Initialize and upgrade the database using Alembic.
    - Generate your first revision.
        env/bin/alembic -c development.ini revision --autogenerate -m "init"
    - Upgrade to that revision.
        env/bin/alembic -c development.ini upgrade head
- Load default data into the database using a script.
    env/bin/initialize_tutorial_db development.ini
docs/tutorials/wiki2/src/views/development.ini
@@ -26,6 +26,12 @@
# wsgi server configuration
###
[alembic]
# path to migration scripts
script_location = tutorial/alembic
file_template = %%(year)d%%(month).2d%%(day).2d_%%(rev)s
# file_template = %%(rev)s_%%(slug)s
[server:main]
use = egg:waitress#main
listen = localhost:6543
docs/tutorials/wiki2/src/views/production.ini
@@ -20,6 +20,12 @@
# wsgi server configuration
###
[alembic]
# path to migration scripts
script_location = tutorial/alembic
file_template = %%(year)d%%(month).2d%%(day).2d_%%(rev)s
# file_template = %%(rev)s_%%(slug)s
[server:main]
use = egg:waitress#main
listen = *:6543
docs/tutorials/wiki2/src/views/pytest.ini
@@ -1,3 +1,3 @@
[pytest]
testpaths = tutorial
python_files = *.py
python_files = test*.py
docs/tutorials/wiki2/src/views/setup.py
@@ -9,10 +9,11 @@
    CHANGES = f.read()
requires = [
    'alembic',
    'bcrypt',
    'docutils',
    'plaster_pastedeploy',
    'pyramid >= 1.9a',
    'pyramid >= 1.9',
    'pyramid_debugtoolbar',
    'pyramid_jinja2',
    'pyramid_retry',
@@ -56,7 +57,7 @@
            'main = tutorial:main',
        ],
        'console_scripts': [
            'initialize_tutorial_db = tutorial.scripts.initializedb:main',
            'initialize_tutorial_db = tutorial.scripts.initialize_db:main',
        ],
    },
)
docs/tutorials/wiki2/src/views/tutorial/alembic/env.py
New file
@@ -0,0 +1,58 @@
"""Pyramid bootstrap environment. """
from alembic import context
from pyramid.paster import get_appsettings, setup_logging
from sqlalchemy import engine_from_config
from tutorial.models.meta import Base
config = context.config
setup_logging(config.config_file_name)
settings = get_appsettings(config.config_file_name)
target_metadata = Base.metadata
def run_migrations_offline():
    """Run migrations in 'offline' mode.
    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.
    Calls to context.execute() here emit the given string to the
    script output.
    """
    context.configure(url=settings['sqlalchemy.url'])
    with context.begin_transaction():
        context.run_migrations()
def run_migrations_online():
    """Run migrations in 'online' mode.
    In this scenario we need to create an Engine
    and associate a connection with the context.
    """
    engine = engine_from_config(settings, prefix='sqlalchemy.')
    connection = engine.connect()
    context.configure(
        connection=connection,
        target_metadata=target_metadata
    )
    try:
        with context.begin_transaction():
            context.run_migrations()
    finally:
        connection.close()
if context.is_offline_mode():
    run_migrations_offline()
else:
    run_migrations_online()
docs/tutorials/wiki2/src/views/tutorial/alembic/script.py.mako
New file
@@ -0,0 +1,24 @@
"""${message}
Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}
"""
from alembic import op
import sqlalchemy as sa
${imports if imports else ""}
# revision identifiers, used by Alembic.
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
depends_on = ${repr(depends_on)}
def upgrade():
    ${upgrades if upgrades else "pass"}
def downgrade():
    ${downgrades if downgrades else "pass"}
docs/tutorials/wiki2/src/views/tutorial/alembic/versions/README.txt
New file
@@ -0,0 +1 @@
Placeholder for alembic versions
docs/tutorials/wiki2/src/views/tutorial/models/__init__.py
@@ -5,8 +5,8 @@
# import or define all models here to ensure they are attached to the
# Base.metadata prior to any initialization routines
from .page import Page  # noqa
from .user import User  # noqa
from .page import Page  # flake8: noqa
from .user import User  # flake8: noqa
# run configure_mappers after defining all of the models to ensure
# all relationships can be setup
docs/tutorials/wiki2/src/views/tutorial/scripts/initialize_db.py
New file
@@ -0,0 +1,56 @@
import os
import sys
from pyramid.paster import bootstrap, setup_logging
from sqlalchemy.exc import OperationalError
from .. import models
def setup_models(dbsession):
    editor = models.User(name='editor', role='editor')
    editor.set_password('editor')
    dbsession.add(editor)
    basic = models.User(name='basic', role='basic')
    basic.set_password('basic')
    dbsession.add(basic)
    page = models.Page(
        name='FrontPage',
        creator=editor,
        data='This is the front page',
    )
    dbsession.add(page)
def usage(argv):
    cmd = os.path.basename(argv[0])
    print('usage: %s <config_uri>\n'
          '(example: "%s development.ini")' % (cmd, cmd))
    sys.exit(1)
def main(argv=sys.argv):
    if len(argv) != 2:
        usage(argv)
    config_uri = argv[1]
    setup_logging(config_uri)
    env = bootstrap(config_uri)
    try:
        with env['request'].tm:
            dbsession = env['request'].dbsession
            setup_models(dbsession)
    except OperationalError:
        print('''
Pyramid is having a problem using your SQL database.  The problem
might be caused by one of the following things:
1.  You may need to initialize your database tables with `alembic`.
    Check your README.txt for description and try to run it.
2.  Your database server may not be running.  Check that the
    database server referred to by the "sqlalchemy.url" setting in
    your "development.ini" file is running.
            ''')
docs/tutorials/wiki2/src/views/tutorial/scripts/initializedb.py
File was deleted
docs/tutorials/wiki2/src/views/tutorial/templates/layout.jinja2
@@ -16,7 +16,7 @@
    <!-- Custom styles for this scaffold -->
    <link href="{{request.static_url('tutorial:static/theme.css')}}" rel="stylesheet">
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- HTML5 shiv and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" integrity="sha384-0s5Pv64cNZJieYFkXYOTId2HMA2Lfb6q2nAcx2n0RTLUnCAoTTsS0nKEO27XyKcY" crossorigin="anonymous"></script>
      <script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" integrity="sha384-ZoaMbDF+4LeFxg6WdScQ9nnR1QC2MIRxA1O9KWEXQwns1G8UNyIEZIQidzb0T1fo" crossorigin="anonymous"></script>
docs/tutorials/wiki2/src/views/tutorial/views/default.py
@@ -9,7 +9,7 @@
from pyramid.view import view_config
from ..models import Page, User
from .. import models
# regular expression used to find WikiWords
wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
@@ -22,13 +22,13 @@
@view_config(route_name='view_page', renderer='../templates/view.jinja2')
def view_page(request):
    pagename = request.matchdict['pagename']
    page = request.dbsession.query(Page).filter_by(name=pagename).first()
    page = request.dbsession.query(models.Page).filter_by(name=pagename).first()
    if page is None:
        raise HTTPNotFound('No such page')
    def add_link(match):
        word = match.group(1)
        exists = request.dbsession.query(Page).filter_by(name=word).all()
        exists = request.dbsession.query(models.Page).filter_by(name=word).all()
        if exists:
            view_url = request.route_url('view_page', pagename=word)
            return '<a href="%s">%s</a>' % (view_url, escape(word))
@@ -44,7 +44,7 @@
@view_config(route_name='edit_page', renderer='../templates/edit.jinja2')
def edit_page(request):
    pagename = request.matchdict['pagename']
    page = request.dbsession.query(Page).filter_by(name=pagename).one()
    page = request.dbsession.query(models.Page).filter_by(name=pagename).one()
    if 'form.submitted' in request.params:
        page.data = request.params['body']
        next_url = request.route_url('view_page', pagename=page.name)
@@ -58,14 +58,14 @@
@view_config(route_name='add_page', renderer='../templates/edit.jinja2')
def add_page(request):
    pagename = request.matchdict['pagename']
    if request.dbsession.query(Page).filter_by(name=pagename).count() > 0:
    if request.dbsession.query(models.Page).filter_by(name=pagename).count() > 0:
        next_url = request.route_url('edit_page', pagename=pagename)
        return HTTPFound(location=next_url)
    if 'form.submitted' in request.params:
        body = request.params['body']
        page = Page(name=pagename, data=body)
        page = models.Page(name=pagename, data=body)
        page.creator = (
            request.dbsession.query(User).filter_by(name='editor').one())
            request.dbsession.query(models.User).filter_by(name='editor').one())
        request.dbsession.add(page)
        next_url = request.route_url('view_page', pagename=pagename)
        return HTTPFound(location=next_url)