summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki2/src/views
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-11-27 04:08:20 -0500
committerChris McDonough <chrism@plope.com>2011-11-27 04:08:20 -0500
commit5edd54f05b05330fa6e899a1bb1650cc7a2df33c (patch)
treedfbeed48fc684717b3f6a5ed7a28fd5fbb1e3479 /docs/tutorials/wiki2/src/views
parent596495de4aa1ab0f3a3752d21c14ac08631e8457 (diff)
downloadpyramid-5edd54f05b05330fa6e899a1bb1650cc7a2df33c.tar.gz
pyramid-5edd54f05b05330fa6e899a1bb1650cc7a2df33c.tar.bz2
pyramid-5edd54f05b05330fa6e899a1bb1650cc7a2df33c.zip
- The SQLAlchemy Wiki tutorial has been updated. It now uses
``@view_config`` decorators and an explicit database population script. Closes #359.
Diffstat (limited to 'docs/tutorials/wiki2/src/views')
-rw-r--r--docs/tutorials/wiki2/src/views/README.txt3
-rw-r--r--docs/tutorials/wiki2/src/views/development.ini8
-rw-r--r--docs/tutorials/wiki2/src/views/production.ini1
-rw-r--r--docs/tutorials/wiki2/src/views/setup.py2
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/__init__.py17
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/models.py30
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/scripts/__init__.py1
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/scripts/populate.py35
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt2
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/tests.py17
-rw-r--r--docs/tutorials/wiki2/src/views/tutorial/views.py17
11 files changed, 86 insertions, 47 deletions
diff --git a/docs/tutorials/wiki2/src/views/README.txt b/docs/tutorials/wiki2/src/views/README.txt
index d41f7f90f..6f851e9b7 100644
--- a/docs/tutorials/wiki2/src/views/README.txt
+++ b/docs/tutorials/wiki2/src/views/README.txt
@@ -1,4 +1 @@
tutorial README
-
-
-
diff --git a/docs/tutorials/wiki2/src/views/development.ini b/docs/tutorials/wiki2/src/views/development.ini
index d1e262324..4f7493cba 100644
--- a/docs/tutorials/wiki2/src/views/development.ini
+++ b/docs/tutorials/wiki2/src/views/development.ini
@@ -1,5 +1,6 @@
[app:main]
use = egg:tutorial
+
pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
@@ -19,7 +20,7 @@ port = 6543
# Begin logging configuration
[loggers]
-keys = root, sqlalchemy
+keys = root, tutorial, sqlalchemy
[handlers]
keys = console
@@ -31,6 +32,11 @@ keys = generic
level = INFO
handlers = console
+[logger_tutorial]
+level = DEBUG
+handlers =
+qualname = tutorial
+
[logger_sqlalchemy]
level = INFO
handlers =
diff --git a/docs/tutorials/wiki2/src/views/production.ini b/docs/tutorials/wiki2/src/views/production.ini
index ac02acf3f..53eaf20a1 100644
--- a/docs/tutorials/wiki2/src/views/production.ini
+++ b/docs/tutorials/wiki2/src/views/production.ini
@@ -1,5 +1,6 @@
[app:main]
use = egg:tutorial
+
pyramid.reload_templates = false
pyramid.debug_authorization = false
pyramid.debug_notfound = false
diff --git a/docs/tutorials/wiki2/src/views/setup.py b/docs/tutorials/wiki2/src/views/setup.py
index 439a86923..9c0e88eb0 100644
--- a/docs/tutorials/wiki2/src/views/setup.py
+++ b/docs/tutorials/wiki2/src/views/setup.py
@@ -42,6 +42,8 @@ setup(name='tutorial',
entry_points = """\
[paste.app_factory]
main = tutorial:main
+ [console_scripts]
+ populate_tutorial = tutorial.scripts.populate:main
""",
)
diff --git a/docs/tutorials/wiki2/src/views/tutorial/__init__.py b/docs/tutorials/wiki2/src/views/tutorial/__init__.py
index 7d79f7a1f..b30d593cf 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/__init__.py
+++ b/docs/tutorials/wiki2/src/views/tutorial/__init__.py
@@ -1,25 +1,18 @@
from pyramid.config import Configurator
from sqlalchemy import engine_from_config
-from tutorial.models import initialize_sql
+from .models import DBSession
def main(global_config, **settings):
- """ This function returns a WSGI application.
+ """ This function returns a Pyramid WSGI application.
"""
engine = engine_from_config(settings, 'sqlalchemy.')
- initialize_sql(engine)
+ DBSession.configure(bind=engine)
config = Configurator(settings=settings)
- config.add_static_view('static', 'tutorial:static', cache_max_age=3600)
+ config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('view_wiki', '/')
config.add_route('view_page', '/{pagename}')
config.add_route('add_page', '/add_page/{pagename}')
config.add_route('edit_page', '/{pagename}/edit_page')
- config.add_view('tutorial.views.view_wiki', route_name='view_wiki')
- config.add_view('tutorial.views.view_page', route_name='view_page',
- renderer='tutorial:templates/view.pt')
- config.add_view('tutorial.views.add_page', route_name='add_page',
- renderer='tutorial:templates/edit.pt')
- config.add_view('tutorial.views.edit_page', route_name='edit_page',
- renderer='tutorial:templates/edit.pt')
+ config.scan()
return config.make_wsgi_app()
-
diff --git a/docs/tutorials/wiki2/src/views/tutorial/models.py b/docs/tutorials/wiki2/src/views/tutorial/models.py
index 30506f67e..499396c5b 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/models.py
+++ b/docs/tutorials/wiki2/src/views/tutorial/models.py
@@ -1,14 +1,15 @@
-import transaction
+from sqlalchemy import (
+ Column,
+ Integer,
+ Text,
+ )
-from sqlalchemy import Column
-from sqlalchemy import Integer
-from sqlalchemy import Text
-
-from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy.orm import scoped_session
-from sqlalchemy.orm import sessionmaker
+from sqlalchemy.orm import (
+ scoped_session,
+ sessionmaker,
+ )
from zope.sqlalchemy import ZopeTransactionExtension
@@ -26,16 +27,3 @@ class Page(Base):
self.name = name
self.data = data
-def initialize_sql(engine):
- DBSession.configure(bind=engine)
- Base.metadata.bind = engine
- Base.metadata.create_all(engine)
- try:
- transaction.begin()
- session = DBSession()
- page = Page('FrontPage', 'initial data')
- session.add(page)
- transaction.commit()
- except IntegrityError:
- # already created
- transaction.abort()
diff --git a/docs/tutorials/wiki2/src/views/tutorial/scripts/__init__.py b/docs/tutorials/wiki2/src/views/tutorial/scripts/__init__.py
new file mode 100644
index 000000000..5bb534f79
--- /dev/null
+++ b/docs/tutorials/wiki2/src/views/tutorial/scripts/__init__.py
@@ -0,0 +1 @@
+# package
diff --git a/docs/tutorials/wiki2/src/views/tutorial/scripts/populate.py b/docs/tutorials/wiki2/src/views/tutorial/scripts/populate.py
new file mode 100644
index 000000000..03188e8ad
--- /dev/null
+++ b/docs/tutorials/wiki2/src/views/tutorial/scripts/populate.py
@@ -0,0 +1,35 @@
+import os
+import sys
+import transaction
+
+from sqlalchemy import engine_from_config
+
+from pyramid.paster import (
+ get_appsettings,
+ setup_logging,
+ )
+
+from ..models import (
+ DBSession,
+ Page,
+ Base,
+ )
+
+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)
+ settings = get_appsettings(config_uri)
+ engine = engine_from_config(settings, 'sqlalchemy.')
+ DBSession.configure(bind=engine)
+ Base.metadata.create_all(engine)
+ with transaction.manager:
+ model = Page('FrontPage', 'This is the front page')
+ DBSession.add(model)
diff --git a/docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt b/docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt
index 14b88d16a..fbfa9870b 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt
+++ b/docs/tutorials/wiki2/src/views/tutorial/templates/mytemplate.pt
@@ -6,9 +6,9 @@
<meta name="keywords" content="python web application" />
<meta name="description" content="pyramid web application" />
<link rel="shortcut icon" href="${request.static_url('tutorial:static/favicon.ico')}" />
+ <link rel="stylesheet" href="${request.static_url('tutorial:static/pylons.css')}" type="text/css" media="screen" charset="utf-8" />
<link rel="stylesheet" href="http://static.pylonsproject.org/fonts/nobile/stylesheet.css" media="screen" />
<link rel="stylesheet" href="http://static.pylonsproject.org/fonts/neuton/stylesheet.css" media="screen" />
- <link rel="stylesheet" href="${request.static_url('tutorial:static/pylons.css')}" type="text/css" media="screen" charset="utf-8" />
<!--[if lte IE 6]>
<link rel="stylesheet" href="${request.static_url('tutorial:static/ie6.css')}" type="text/css" media="screen" charset="utf-8" />
<![endif]-->
diff --git a/docs/tutorials/wiki2/src/views/tutorial/tests.py b/docs/tutorials/wiki2/src/views/tutorial/tests.py
index 668bf5479..31d2dc6d5 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/tests.py
+++ b/docs/tutorials/wiki2/src/views/tutorial/tests.py
@@ -1,15 +1,20 @@
import unittest
-
+import transaction
from pyramid import testing
def _initTestingDB():
- from tutorial.models import DBSession
- from tutorial.models import Base
from sqlalchemy import create_engine
+ from tutorial.models import (
+ DBSession,
+ Page,
+ Base
+ )
engine = create_engine('sqlite://')
- DBSession.configure(bind=engine)
- Base.metadata.bind = engine
Base.metadata.create_all(engine)
+ DBSession.configure(bind=engine)
+ with transaction.manager:
+ model = Page('FrontPage', 'This is the front page')
+ DBSession.add(model)
return DBSession
def _registerRoutes(config):
@@ -20,8 +25,10 @@ def _registerRoutes(config):
class ViewWikiTests(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
+ self.session = _initTestingDB()
def tearDown(self):
+ self.session.remove()
testing.tearDown()
def _callFUT(self, request):
diff --git a/docs/tutorials/wiki2/src/views/tutorial/views.py b/docs/tutorials/wiki2/src/views/tutorial/views.py
index e04b96ae4..5c49dd2e8 100644
--- a/docs/tutorials/wiki2/src/views/tutorial/views.py
+++ b/docs/tutorials/wiki2/src/views/tutorial/views.py
@@ -1,19 +1,26 @@
import re
-
from docutils.core import publish_parts
-from pyramid.httpexceptions import HTTPFound, HTTPNotFound
+from pyramid.httpexceptions import (
+ HTTPFound,
+ HTTPNotFound,
+ )
+from pyramid.view import view_config
-from tutorial.models import DBSession
-from tutorial.models import Page
+from .models import (
+ DBSession,
+ Page,
+ )
# regular expression used to find WikiWords
wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
+@view_config(route_name='view_wiki')
def view_wiki(request):
return HTTPFound(location = request.route_url('view_page',
pagename='FrontPage'))
+@view_config(route_name='view_page', renderer='templates/view.pt')
def view_page(request):
pagename = request.matchdict['pagename']
session = DBSession()
@@ -36,6 +43,7 @@ def view_page(request):
edit_url = request.route_url('edit_page', pagename=pagename)
return dict(page=page, content=content, edit_url=edit_url)
+@view_config(route_name='add_page', renderer='templates/edit.pt')
def add_page(request):
name = request.matchdict['pagename']
if 'form.submitted' in request.params:
@@ -49,6 +57,7 @@ def add_page(request):
page = Page('', '')
return dict(page=page, save_url=save_url)
+@view_config(route_name='edit_page', renderer='templates/edit.pt')
def edit_page(request):
name = request.matchdict['pagename']
session = DBSession()