summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt10
-rw-r--r--TODO.txt4
-rw-r--r--docs/narr/project.rst13
-rw-r--r--docs/tutorials/wiki2/basiclayout.rst6
-rw-r--r--docs/tutorials/wiki2/installation.rst12
-rw-r--r--docs/tutorials/wiki2/tests.rst6
-rw-r--r--pyramid/scaffolds/__init__.py8
-rw-r--r--[-rwxr-xr-x]pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl19
-rw-r--r--[-rwxr-xr-x]pyramid/scaffolds/alchemy/+package+/models.py56
-rw-r--r--pyramid/scaffolds/alchemy/+package+/templates/model.pt_tmpl82
-rw-r--r--pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl (renamed from pyramid/scaffolds/routesalchemy/+package+/templates/mytemplate.pt_tmpl)0
-rw-r--r--pyramid/scaffolds/alchemy/+package+/templates/root.pt_tmpl80
-rw-r--r--pyramid/scaffolds/alchemy/+package+/tests.py_tmpl53
-rw-r--r--pyramid/scaffolds/alchemy/+package+/views.py_tmpl10
-rw-r--r--pyramid/scaffolds/alchemy/CHANGES.txt_tmpl4
-rw-r--r--pyramid/scaffolds/alchemy/setup.py_tmpl8
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/__init__.py_tmpl18
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/models.py42
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/favicon.icobin1406 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/footerbg.pngbin333 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/headerbg.pngbin203 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/ie6.css8
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/middlebg.pngbin2797 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/pylons.css65
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/pyramid-small.pngbin7044 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/pyramid.pngbin33055 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/static/transparent.gifbin49 -> 0 bytes
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/tests.py_tmpl24
-rw-r--r--pyramid/scaffolds/routesalchemy/+package+/views.py_tmpl7
-rw-r--r--pyramid/scaffolds/routesalchemy/CHANGES.txt_tmpl4
-rw-r--r--pyramid/scaffolds/routesalchemy/MANIFEST.in_tmpl2
-rw-r--r--pyramid/scaffolds/routesalchemy/README.txt_tmpl1
-rw-r--r--pyramid/scaffolds/routesalchemy/development.ini_tmpl57
-rw-r--r--pyramid/scaffolds/routesalchemy/production.ini_tmpl56
-rw-r--r--pyramid/scaffolds/routesalchemy/setup.cfg_tmpl27
-rw-r--r--pyramid/scaffolds/routesalchemy/setup.py_tmpl46
-rw-r--r--pyramid/scaffolds/tests.py2
-rw-r--r--setup.py1
38 files changed, 69 insertions, 662 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 110205055..42f07a275 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -67,3 +67,13 @@ Dependencies
- Pyramid no longer depends on the Paste or PasteScript packages.
+Scaffolds
+---------
+
+- Rendered scaffolds have now been changed to be more relocatable (fewer
+ mentions of the package name within files in the package).
+
+- The ``alchemy`` scaffold has been removed.
+
+- The ``routesalchemy`` scaffold has been renamed ``alchemy``.
+
diff --git a/TODO.txt b/TODO.txt
index d3b527f43..5a030a84c 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -9,7 +9,9 @@ Must-Have
- Fix SQLA tutorial to match ZODB tutorial.
-- Fix other scaffolds to match ZODB scaffold.
+- Fix routesalchemy scaffold to match ZODB scaffold.
+
+- Remove alchemy scaffold.
Nice-to-Have
------------
diff --git a/docs/narr/project.rst b/docs/narr/project.rst
index fe015d72f..4c528ab58 100644
--- a/docs/narr/project.rst
+++ b/docs/narr/project.rst
@@ -28,7 +28,6 @@ as part of Pyramid.
single: starter scaffold
single: zodb scaffold
single: alchemy scaffold
- single: routesalchemy scaffold
.. _additional_paster_scaffolds:
@@ -52,12 +51,8 @@ The included scaffolds are these:
``zodb``
URL mapping via :term:`traversal` and persistence via :term:`ZODB`.
-``routesalchemy``
- URL mapping via :term:`URL dispatch` and persistence via
- :term:`SQLAlchemy`
-
``alchemy``
- URL mapping via :term:`traversal` and persistence via
+ URL mapping via :term:`URL dispatch` and persistence via
:term:`SQLAlchemy`
.. note::
@@ -99,18 +94,18 @@ Or on Windows:
The above command uses the ``pcreate`` command to create a project with the
``starter`` scaffold. To use a different scaffold, such as
-``routesalchemy``, you'd just change the ``-s`` argument value. For example,
+``alchemy``, you'd just change the ``-s`` argument value. For example,
on UNIX:
.. code-block:: text
- $ bin/pcreate -s routesalchemy MyProject
+ $ bin/pcreate -s alchemy MyProject
Or on Windows:
.. code-block:: text
- $ Scripts\pcreate routesalchemy MyProject
+ $ Scripts\pcreate alchemy MyProject
Here's sample output from a run of ``pcreate`` on UNIX for a project we name
``MyProject``:
diff --git a/docs/tutorials/wiki2/basiclayout.rst b/docs/tutorials/wiki2/basiclayout.rst
index acd2f04f3..db8ab1fbe 100644
--- a/docs/tutorials/wiki2/basiclayout.rst
+++ b/docs/tutorials/wiki2/basiclayout.rst
@@ -2,7 +2,7 @@
Basic Layout
============
-The starter files generated by the ``routesalchemy`` scaffold are
+The starter files generated by the ``alchemy`` scaffold are
basic, but they provide a good orientation for the high-level patterns common
to most :term:`url dispatch` -based :app:`Pyramid` projects.
@@ -98,7 +98,7 @@ register views for the routes, mapping your patterns to code:
The first positional ``add_view`` argument ``tutorial.views.my_view`` is the
dotted name to a *function* we write (generated by the
-``routesalchemy`` scaffold) that is given a ``request`` object and
+``alchemy`` scaffold) that is given a ``request`` object and
which returns a response or a dictionary. This view also names a
``renderer``, which is a template which lives in the ``templates``
subdirectory of the package. When the ``tutorial.views.my_view`` view
@@ -124,7 +124,7 @@ Content Models with ``models.py``
In a SQLAlchemy-based application, a *model* object is an object
composed by querying the SQL database which backs an application.
SQLAlchemy is an "object relational mapper" (an ORM). The
-``models.py`` file is where the ``routesalchemy`` scaffold
+``models.py`` file is where the ``alchemy`` scaffold
put the classes that implement our models.
Let's take a look. First, we need some imports to support later code.
diff --git a/docs/tutorials/wiki2/installation.rst b/docs/tutorials/wiki2/installation.rst
index ded36f6e2..147f7f563 100644
--- a/docs/tutorials/wiki2/installation.rst
+++ b/docs/tutorials/wiki2/installation.rst
@@ -84,7 +84,7 @@ Making a Project
Your next step is to create a project. :app:`Pyramid` supplies a
variety of scaffolds to generate sample projects. We will use the
-``routesalchemy`` scaffold, which generates an application
+``alchemy`` scaffold, which generates an application
that uses :term:`SQLAlchemy` and :term:`URL dispatch`.
The below instructions assume your current working directory is the
@@ -94,15 +94,15 @@ On UNIX:
.. code-block:: text
- $ bin/pcreate -s routesalchemy tutorial
+ $ bin/pcreate -s alchemy tutorial
On Windows:
.. code-block:: text
- c:\pyramidtut> Scripts\pcreate -s routesalchemy tutorial
+ c:\pyramidtut> Scripts\pcreate -s alchemy tutorial
-.. note:: If you are using Windows, the ``routesalchemy``
+.. note:: If you are using Windows, the ``alchemy``
scaffold may not deal gracefully with installation into a
location that contains spaces in the path. If you experience
startup problems, try putting both the virtualenv and the project
@@ -222,10 +222,10 @@ page. You can read more about the purpose of the icon at
:ref:`debug_toolbar`. It allows you to get information about your
application while you develop.
-Decisions the ``routesalchemy`` Scaffold Has Made For You
+Decisions the ``alchemy`` Scaffold Has Made For You
=================================================================
-Creating a project using the ``routesalchemy`` scaffold makes
+Creating a project using the ``alchemy`` scaffold makes
the following assumptions:
- you are willing to use :term:`SQLAlchemy` as a database access tool
diff --git a/docs/tutorials/wiki2/tests.rst b/docs/tutorials/wiki2/tests.rst
index d0027d2f8..8fa8ea3ae 100644
--- a/docs/tutorials/wiki2/tests.rst
+++ b/docs/tutorials/wiki2/tests.rst
@@ -13,9 +13,9 @@ We write a test class for the model class ``Page`` and another test class
for the ``initialize_sql`` function.
To do so, we'll retain the ``tutorial.tests.ViewTests`` class provided as a
-result of the ``routesalchemy`` project generator. We'll add two
-test classes: one for the ``Page`` model named ``PageModelTests``, one for the
-``initialize_sql`` function named ``InitializeSqlTests``.
+result of the ``alchemy`` scaffold. We'll add two test classes: one for the
+``Page`` model named ``PageModelTests``, one for the ``initialize_sql``
+function named ``InitializeSqlTests``.
Testing the Views
=================
diff --git a/pyramid/scaffolds/__init__.py b/pyramid/scaffolds/__init__.py
index 4fecfc1e7..3fba05390 100644
--- a/pyramid/scaffolds/__init__.py
+++ b/pyramid/scaffolds/__init__.py
@@ -28,13 +28,9 @@ class StarterProjectTemplate(PyramidTemplate):
class ZODBProjectTemplate(PyramidTemplate):
_template_dir = 'zodb'
- summary = 'Pyramid ZODB starter project'
-
-class RoutesAlchemyProjectTemplate(PyramidTemplate):
- _template_dir = 'routesalchemy'
- summary = 'Pyramid SQLAlchemy project using url dispatch (no traversal)'
+ summary = 'Pyramid ZODB project using traversal'
class AlchemyProjectTemplate(PyramidTemplate):
_template_dir = 'alchemy'
- summary = 'Pyramid SQLAlchemy project using traversal'
+ summary = 'Pyramid SQLAlchemy project using url dispatch'
diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl b/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl
index 8eb878688..24201912b 100755..100644
--- a/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl
+++ b/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl
@@ -1,19 +1,18 @@
from pyramid.config import Configurator
from sqlalchemy import engine_from_config
-from {{package}}.models import appmaker
+from {{package}}.models import initialize_sql
def main(global_config, **settings):
- """ This function returns a WSGI application.
+ """ This function returns a Pyramid WSGI application.
"""
engine = engine_from_config(settings, 'sqlalchemy.')
- get_root = appmaker(engine)
- config = Configurator(settings=settings, root_factory=get_root)
+ initialize_sql(engine)
+ config = Configurator(settings=settings)
config.add_static_view('static', '{{package}}:static', cache_max_age=3600)
- config.add_view('{{package}}.views.view_root',
- context='{{package}}.models.MyRoot',
- renderer="templates/root.pt")
- config.add_view('{{package}}.views.view_model',
- context='{{package}}.models.MyModel',
- renderer="templates/model.pt")
+ config.add_route('home', '/')
+ config.add_view('{{package}}.views.my_view',
+ route_name='home',
+ renderer='templates/mytemplate.pt')
return config.make_wsgi_app()
+
diff --git a/pyramid/scaffolds/alchemy/+package+/models.py b/pyramid/scaffolds/alchemy/+package+/models.py
index 2685da5bb..bef483d3a 100755..100644
--- a/pyramid/scaffolds/alchemy/+package+/models.py
+++ b/pyramid/scaffolds/alchemy/+package+/models.py
@@ -1,15 +1,14 @@
import transaction
-from sqlalchemy.orm import scoped_session
-from sqlalchemy.orm import sessionmaker
-
-from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import Column
+from sqlalchemy import Integer
+from sqlalchemy import Unicode
from sqlalchemy.exc import IntegrityError
+from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import Integer
-from sqlalchemy import Unicode
-from sqlalchemy import Column
+from sqlalchemy.orm import scoped_session
+from sqlalchemy.orm import sessionmaker
from zope.sqlalchemy import ZopeTransactionExtension
@@ -26,45 +25,9 @@ class MyModel(Base):
self.name = name
self.value = value
-class MyRoot(object):
- __name__ = None
- __parent__ = None
-
- def __getitem__(self, key):
- session= DBSession()
- try:
- id = int(key)
- except (ValueError, TypeError):
- raise KeyError(key)
-
- item = session.query(MyModel).get(id)
- if item is None:
- raise KeyError(key)
-
- item.__parent__ = self
- item.__name__ = key
- return item
-
- def get(self, key, default=None):
- try:
- item = self.__getitem__(key)
- except KeyError:
- item = default
- return item
-
- def __iter__(self):
- session= DBSession()
- query = session.query(MyModel)
- return iter(query)
-
-root = MyRoot()
-
-def root_factory(request):
- return root
-
def populate():
session = DBSession()
- model = MyModel(name='test name', value=55)
+ model = MyModel(name='root', value=55)
session.add(model)
session.flush()
transaction.commit()
@@ -77,8 +40,3 @@ def initialize_sql(engine):
populate()
except IntegrityError:
transaction.abort()
- return DBSession
-
-def appmaker(engine):
- initialize_sql(engine)
- return root_factory
diff --git a/pyramid/scaffolds/alchemy/+package+/templates/model.pt_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/model.pt_tmpl
deleted file mode 100644
index 83ddd768e..000000000
--- a/pyramid/scaffolds/alchemy/+package+/templates/model.pt_tmpl
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal">
-<head>
- <title>The Pyramid Web Application Development Framework</title>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
- <meta name="keywords" content="python web application" />
- <meta name="description" content="pyramid web application" />
- <link rel="shortcut icon" href="${request.static_url('{{package}}:static/favicon.ico')}" />
- <link rel="stylesheet" href="${request.static_url('{{package}}: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" />
- <!--[if lte IE 6]>
- <link rel="stylesheet" href="${request.static_url('{{package}}:static/ie6.css')}" type="text/css" media="screen" charset="utf-8" />
- <![endif]-->
-</head>
-<body>
- <div id="wrap">
- <div id="top">
- <div class="top align-center">
- <div><img src="${request.static_url('{{package}}:static/pyramid.png')}" width="750" height="169" alt="pyramid"/></div>
- </div>
- </div>
- <div id="middle">
- <div class="middle align-center">
- <p class="app-welcome">
- Welcome to <span class="app-name">${project}</span>, an application generated by<br/>
- the Pyramid web application development framework.
- </p>
- </div>
- </div>
- <div id="bottom">
- <div class="bottom">
- <div id="left" class="align-right">
- <h2>Search documentation</h2>
- <form method="get" action="http://docs.pylonsproject.org/projects/pyramid/current/search.html">
- <input type="text" id="q" name="q" value="" />
- <input type="submit" id="x" value="Go" />
- </form>
- <br/>
- <p>
- <b>Id:</b> ${item.id}<br />
- <b>Name:</b> ${item.name}<br />
- <b>Value:</b> ${item.value}
- </p>
- </div>
- <div id="right" class="align-left">
- <h2>Pyramid links</h2>
- <ul class="links">
- <li>
- <a href="http://pylonsproject.org">Pylons Website</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#narrative-documentation">Narrative Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#api-documentation">API Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#tutorials">Tutorials</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#change-history">Change History</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#sample-applications">Sample Applications</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#support-and-development">Support and Development</a>
- </li>
- <li>
- <a href="irc://irc.freenode.net#pyramid">IRC Channel</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div id="footer">
- <div class="footer">&copy; Copyright 2008-2011, Agendaless Consulting.</div>
- </div>
-</body>
-</html>
diff --git a/pyramid/scaffolds/routesalchemy/+package+/templates/mytemplate.pt_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl
index 3cd9c66a4..3cd9c66a4 100644
--- a/pyramid/scaffolds/routesalchemy/+package+/templates/mytemplate.pt_tmpl
+++ b/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl
diff --git a/pyramid/scaffolds/alchemy/+package+/templates/root.pt_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/root.pt_tmpl
deleted file mode 100644
index fc41ce20a..000000000
--- a/pyramid/scaffolds/alchemy/+package+/templates/root.pt_tmpl
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal">
-<head>
- <title>The Pyramid Web Application Development Framework</title>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
- <meta name="keywords" content="python web application" />
- <meta name="description" content="pyramid web application" />
- <link rel="shortcut icon" href="${request.static_url('{{package}}:static/favicon.ico')}" />
- <link rel="stylesheet" href="${request.static_url('{{package}}: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" />
- <!--[if lte IE 6]>
- <link rel="stylesheet" href="${request.static_url('{{package}}:static/ie6.css')}" type="text/css" media="screen" charset="utf-8" />
- <![endif]-->
-</head>
-<body>
- <div id="wrap">
- <div id="top">
- <div class="top align-center">
- <div><img src="${request.static_url('{{package}}:static/pyramid.png')}" width="750" height="169" alt="pyramid"/></div>
- </div>
- </div>
- <div id="middle">
- <div class="middle align-center">
- <p class="app-welcome">
- Welcome to <span class="app-name">${project}</span>, an application generated by<br/>
- the Pyramid web application development framework.
- </p>
- </div>
- </div>
- <div id="bottom">
- <div class="bottom">
- <div id="left" class="align-right">
- <h2>Search documentation</h2>
- <form method="get" action="http://docs.pylonsproject.org/projects/pyramid/current/search.html">
- <input type="text" id="q" name="q" value="" />
- <input type="submit" id="x" value="Go" />
- </form>
- <br/>
- <p tal:repeat="item items">
- <a href="${item.id}">${item.name}</a>
- </p>
- </div>
- <div id="right" class="align-left">
- <h2>Pyramid links</h2>
- <ul class="links">
- <li>
- <a href="http://pylonsproject.org">Pylons Website</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#narrative-documentation">Narrative Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#api-documentation">API Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#tutorials">Tutorials</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#change-history">Change History</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#sample-applications">Sample Applications</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/current/#support-and-development">Support and Development</a>
- </li>
- <li>
- <a href="irc://irc.freenode.net#pyramid">IRC Channel</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div id="footer">
- <div class="footer">&copy; Copyright 2008-2011, Agendaless Consulting.</div>
- </div>
-</body>
-</html>
diff --git a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl
index 83b6a4739..29aea7258 100644
--- a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl
+++ b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl
@@ -1,5 +1,5 @@
import unittest
-
+from pyramid.config import Configurator
from pyramid import testing
def _initTestingDB():
@@ -8,52 +8,17 @@ def _initTestingDB():
session = initialize_sql(create_engine('sqlite://'))
return session
-class TestMyRoot(unittest.TestCase):
+class TestMyView(unittest.TestCase):
def setUp(self):
self.config = testing.setUp()
- self.session = _initTestingDB()
+ _initTestingDB()
def tearDown(self):
testing.tearDown()
- self.session.remove()
-
- def _makeOne(self):
- from {{package}}.models import MyRoot
- return MyRoot()
-
- def test___getitem__hit(self):
- from {{package}}.models import MyModel
- root = self._makeOne()
- first = root['1']
- self.assertEqual(first.__class__, MyModel)
- self.assertEqual(first.__parent__, root)
- self.assertEqual(first.__name__, '1')
-
- def test___getitem__miss(self):
- root = self._makeOne()
- self.assertRaises(KeyError, root.__getitem__, '100')
-
- def test___getitem__notint(self):
- root = self._makeOne()
- self.assertRaises(KeyError, root.__getitem__, 'notint')
-
- def test_get_hit(self):
- from {{package}}.models import MyModel
- root = self._makeOne()
- first = root.get('1')
- self.assertEqual(first.__class__, MyModel)
- self.assertEqual(first.__parent__, root)
- self.assertEqual(first.__name__, '1')
-
- def test_get_miss(self):
- root = self._makeOne()
- self.assertEqual(root.get('100', 'default'), 'default')
- self.assertEqual(root.get('100'), None)
- def test___iter__(self):
- root = self._makeOne()
- iterable = iter(root)
- result = list(iterable)
- self.assertEqual(len(result), 1)
- model = result[0]
- self.assertEqual(model.id, 1)
+ def test_it(self):
+ from {{package}}.views import my_view
+ request = testing.DummyRequest()
+ info = my_view(request)
+ self.assertEqual(info['root'].name, 'root')
+ self.assertEqual(info['project'], '{{project}}')
diff --git a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl
index 12bce138e..45532b47b 100644
--- a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl
+++ b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl
@@ -1,5 +1,7 @@
-def view_root(context, request):
- return {'items':list(context), 'project':'{{project}}'}
+from {{package}}.models import DBSession
+from {{package}}.models import MyModel
-def view_model(context, request):
- return {'item':context, 'project':'{{project}}'}
+def my_view(request):
+ dbsession = DBSession()
+ root = dbsession.query(MyModel).filter(MyModel.name=='root').first()
+ return {'root':root, 'project':'{{project}}'}
diff --git a/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl b/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl
index 5b34f7803..35a34f332 100644
--- a/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl
+++ b/pyramid/scaffolds/alchemy/CHANGES.txt_tmpl
@@ -1,4 +1,4 @@
-0.1
+0.0
---
-- Initial version
+- Initial version
diff --git a/pyramid/scaffolds/alchemy/setup.py_tmpl b/pyramid/scaffolds/alchemy/setup.py_tmpl
index 68f8e6245..a2cdaac60 100644
--- a/pyramid/scaffolds/alchemy/setup.py_tmpl
+++ b/pyramid/scaffolds/alchemy/setup.py_tmpl
@@ -9,9 +9,10 @@ CHANGES = open(os.path.join(here, 'CHANGES.txt')).read()
requires = [
'pyramid',
+ 'SQLAlchemy',
+ 'transaction',
'pyramid_tm',
'pyramid_debugtoolbar',
- 'sqlalchemy',
'zope.sqlalchemy',
]
@@ -31,13 +32,12 @@ setup(name='{{project}}',
author='',
author_email='',
url='',
- keywords='web pylons pyramid',
+ keywords='web wsgi bfg pylons pyramid',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
+ test_suite='{{package}}',
install_requires = requires,
- tests_require = requires,
- test_suite="{{package}}",
entry_points = """\
[paste.app_factory]
main = {{package}}:main
diff --git a/pyramid/scaffolds/routesalchemy/+package+/__init__.py_tmpl b/pyramid/scaffolds/routesalchemy/+package+/__init__.py_tmpl
deleted file mode 100644
index 24201912b..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/__init__.py_tmpl
+++ /dev/null
@@ -1,18 +0,0 @@
-from pyramid.config import Configurator
-from sqlalchemy import engine_from_config
-
-from {{package}}.models import initialize_sql
-
-def main(global_config, **settings):
- """ This function returns a Pyramid WSGI application.
- """
- engine = engine_from_config(settings, 'sqlalchemy.')
- initialize_sql(engine)
- config = Configurator(settings=settings)
- config.add_static_view('static', '{{package}}:static', cache_max_age=3600)
- config.add_route('home', '/')
- config.add_view('{{package}}.views.my_view',
- route_name='home',
- renderer='templates/mytemplate.pt')
- return config.make_wsgi_app()
-
diff --git a/pyramid/scaffolds/routesalchemy/+package+/models.py b/pyramid/scaffolds/routesalchemy/+package+/models.py
deleted file mode 100644
index bef483d3a..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/models.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import transaction
-
-from sqlalchemy import Column
-from sqlalchemy import Integer
-from sqlalchemy import Unicode
-
-from sqlalchemy.exc import IntegrityError
-from sqlalchemy.ext.declarative import declarative_base
-
-from sqlalchemy.orm import scoped_session
-from sqlalchemy.orm import sessionmaker
-
-from zope.sqlalchemy import ZopeTransactionExtension
-
-DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
-Base = declarative_base()
-
-class MyModel(Base):
- __tablename__ = 'models'
- id = Column(Integer, primary_key=True)
- name = Column(Unicode(255), unique=True)
- value = Column(Integer)
-
- def __init__(self, name, value):
- self.name = name
- self.value = value
-
-def populate():
- session = DBSession()
- model = MyModel(name='root', value=55)
- session.add(model)
- session.flush()
- transaction.commit()
-
-def initialize_sql(engine):
- DBSession.configure(bind=engine)
- Base.metadata.bind = engine
- Base.metadata.create_all(engine)
- try:
- populate()
- except IntegrityError:
- transaction.abort()
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/favicon.ico b/pyramid/scaffolds/routesalchemy/+package+/static/favicon.ico
deleted file mode 100644
index 71f837c9e..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/footerbg.png b/pyramid/scaffolds/routesalchemy/+package+/static/footerbg.png
deleted file mode 100644
index 1fbc873da..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/footerbg.png
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/headerbg.png b/pyramid/scaffolds/routesalchemy/+package+/static/headerbg.png
deleted file mode 100644
index 0596f2020..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/headerbg.png
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/ie6.css b/pyramid/scaffolds/routesalchemy/+package+/static/ie6.css
deleted file mode 100644
index b7c8493d8..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/ie6.css
+++ /dev/null
@@ -1,8 +0,0 @@
-* html img,
-* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')",
-this.src = "static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')",
-this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
-);}
-#wrap{display:table;height:100%}
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/middlebg.png b/pyramid/scaffolds/routesalchemy/+package+/static/middlebg.png
deleted file mode 100644
index 2369cfb7d..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/middlebg.png
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/pylons.css b/pyramid/scaffolds/routesalchemy/+package+/static/pylons.css
deleted file mode 100644
index c54499ddd..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/pylons.css
+++ /dev/null
@@ -1,65 +0,0 @@
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;/* 16px */
-vertical-align:baseline;background:transparent;}
-body{line-height:1;}
-ol,ul{list-style:none;}
-blockquote,q{quotes:none;}
-blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}
-:focus{outline:0;}
-ins{text-decoration:none;}
-del{text-decoration:line-through;}
-table{border-collapse:collapse;border-spacing:0;}
-sub{vertical-align:sub;font-size:smaller;line-height:normal;}
-sup{vertical-align:super;font-size:smaller;line-height:normal;}
-ul,menu,dir{display:block;list-style-type:disc;margin:1em 0;padding-left:40px;}
-ol{display:block;list-style-type:decimal-leading-zero;margin:1em 0;padding-left:40px;}
-li{display:list-item;}
-ul ul,ul ol,ul dir,ul menu,ul dl,ol ul,ol ol,ol dir,ol menu,ol dl,dir ul,dir ol,dir dir,dir menu,dir dl,menu ul,menu ol,menu dir,menu menu,menu dl,dl ul,dl ol,dl dir,dl menu,dl dl{margin-top:0;margin-bottom:0;}
-ol ul,ul ul,menu ul,dir ul,ol menu,ul menu,menu menu,dir menu,ol dir,ul dir,menu dir,dir dir{list-style-type:circle;}
-ol ol ul,ol ul ul,ol menu ul,ol dir ul,ol ol menu,ol ul menu,ol menu menu,ol dir menu,ol ol dir,ol ul dir,ol menu dir,ol dir dir,ul ol ul,ul ul ul,ul menu ul,ul dir ul,ul ol menu,ul ul menu,ul menu menu,ul dir menu,ul ol dir,ul ul dir,ul menu dir,ul dir dir,menu ol ul,menu ul ul,menu menu ul,menu dir ul,menu ol menu,menu ul menu,menu menu menu,menu dir menu,menu ol dir,menu ul dir,menu menu dir,menu dir dir,dir ol ul,dir ul ul,dir menu ul,dir dir ul,dir ol menu,dir ul menu,dir menu menu,dir dir menu,dir ol dir,dir ul dir,dir menu dir,dir dir dir{list-style-type:square;}
-.hidden{display:none;}
-p{line-height:1.5em;}
-h1{font-size:1.75em;line-height:1.7em;font-family:helvetica,verdana;}
-h2{font-size:1.5em;line-height:1.7em;font-family:helvetica,verdana;}
-h3{font-size:1.25em;line-height:1.7em;font-family:helvetica,verdana;}
-h4{font-size:1em;line-height:1.7em;font-family:helvetica,verdana;}
-html,body{width:100%;height:100%;}
-body{margin:0;padding:0;background-color:#ffffff;position:relative;font:16px/24px "NobileRegular","Lucida Grande",Lucida,Verdana,sans-serif;}
-a{color:#1b61d6;text-decoration:none;}
-a:hover{color:#e88f00;text-decoration:underline;}
-body h1,
-body h2,
-body h3,
-body h4,
-body h5,
-body h6{font-family:"NeutonRegular","Lucida Grande",Lucida,Verdana,sans-serif;font-weight:normal;color:#373839;font-style:normal;}
-#wrap{min-height:100%;}
-#header,#footer{width:100%;color:#ffffff;height:40px;position:absolute;text-align:center;line-height:40px;overflow:hidden;font-size:12px;vertical-align:middle;}
-#header{background:#000000;top:0;font-size:14px;}
-#footer{bottom:0;background:#000000 url(footerbg.png) repeat-x 0 top;position:relative;margin-top:-40px;clear:both;}
-.header,.footer{width:750px;margin-right:auto;margin-left:auto;}
-.wrapper{width:100%}
-#top,#top-small,#bottom{width:100%;}
-#top{color:#000000;height:230px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;}
-#top-small{color:#000000;height:60px;background:#ffffff url(headerbg.png) repeat-x 0 top;position:relative;}
-#bottom{color:#222;background-color:#ffffff;}
-.top,.top-small,.middle,.bottom{width:750px;margin-right:auto;margin-left:auto;}
-.top{padding-top:40px;}
-.top-small{padding-top:10px;}
-#middle{width:100%;height:100px;background:url(middlebg.png) repeat-x;border-top:2px solid #ffffff;border-bottom:2px solid #b2b2b2;}
-.app-welcome{margin-top:25px;}
-.app-name{color:#000000;font-weight:bold;}
-.bottom{padding-top:50px;}
-#left{width:350px;float:left;padding-right:25px;}
-#right{width:350px;float:right;padding-left:25px;}
-.align-left{text-align:left;}
-.align-right{text-align:right;}
-.align-center{text-align:center;}
-ul.links{margin:0;padding:0;}
-ul.links li{list-style-type:none;font-size:14px;}
-form{border-style:none;}
-fieldset{border-style:none;}
-input{color:#222;border:1px solid #ccc;font-family:sans-serif;font-size:12px;line-height:16px;}
-input[type=text],input[type=password]{width:205px;}
-input[type=submit]{background-color:#ddd;font-weight:bold;}
-/*Opera Fix*/
-body:before{content:"";height:100%;float:left;width:0;margin-top:-32767px;}
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/pyramid-small.png b/pyramid/scaffolds/routesalchemy/+package+/static/pyramid-small.png
deleted file mode 100644
index a5bc0ade7..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/pyramid-small.png
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/pyramid.png b/pyramid/scaffolds/routesalchemy/+package+/static/pyramid.png
deleted file mode 100644
index 347e05549..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/pyramid.png
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/static/transparent.gif b/pyramid/scaffolds/routesalchemy/+package+/static/transparent.gif
deleted file mode 100644
index 0341802e5..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/static/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/pyramid/scaffolds/routesalchemy/+package+/tests.py_tmpl b/pyramid/scaffolds/routesalchemy/+package+/tests.py_tmpl
deleted file mode 100644
index 29aea7258..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/tests.py_tmpl
+++ /dev/null
@@ -1,24 +0,0 @@
-import unittest
-from pyramid.config import Configurator
-from pyramid import testing
-
-def _initTestingDB():
- from sqlalchemy import create_engine
- from {{package}}.models import initialize_sql
- session = initialize_sql(create_engine('sqlite://'))
- return session
-
-class TestMyView(unittest.TestCase):
- def setUp(self):
- self.config = testing.setUp()
- _initTestingDB()
-
- def tearDown(self):
- testing.tearDown()
-
- def test_it(self):
- from {{package}}.views import my_view
- request = testing.DummyRequest()
- info = my_view(request)
- self.assertEqual(info['root'].name, 'root')
- self.assertEqual(info['project'], '{{project}}')
diff --git a/pyramid/scaffolds/routesalchemy/+package+/views.py_tmpl b/pyramid/scaffolds/routesalchemy/+package+/views.py_tmpl
deleted file mode 100644
index 45532b47b..000000000
--- a/pyramid/scaffolds/routesalchemy/+package+/views.py_tmpl
+++ /dev/null
@@ -1,7 +0,0 @@
-from {{package}}.models import DBSession
-from {{package}}.models import MyModel
-
-def my_view(request):
- dbsession = DBSession()
- root = dbsession.query(MyModel).filter(MyModel.name=='root').first()
- return {'root':root, 'project':'{{project}}'}
diff --git a/pyramid/scaffolds/routesalchemy/CHANGES.txt_tmpl b/pyramid/scaffolds/routesalchemy/CHANGES.txt_tmpl
deleted file mode 100644
index 35a34f332..000000000
--- a/pyramid/scaffolds/routesalchemy/CHANGES.txt_tmpl
+++ /dev/null
@@ -1,4 +0,0 @@
-0.0
----
-
-- Initial version
diff --git a/pyramid/scaffolds/routesalchemy/MANIFEST.in_tmpl b/pyramid/scaffolds/routesalchemy/MANIFEST.in_tmpl
deleted file mode 100644
index 0ff6eb7a0..000000000
--- a/pyramid/scaffolds/routesalchemy/MANIFEST.in_tmpl
+++ /dev/null
@@ -1,2 +0,0 @@
-include *.txt *.ini *.cfg *.rst
-recursive-include {{package}} *.ico *.png *.css *.gif *.jpg *.pt *.txt *.mak *.mako *.js *.html *.xml
diff --git a/pyramid/scaffolds/routesalchemy/README.txt_tmpl b/pyramid/scaffolds/routesalchemy/README.txt_tmpl
deleted file mode 100644
index 40f98d14a..000000000
--- a/pyramid/scaffolds/routesalchemy/README.txt_tmpl
+++ /dev/null
@@ -1 +0,0 @@
-{{project}} README
diff --git a/pyramid/scaffolds/routesalchemy/development.ini_tmpl b/pyramid/scaffolds/routesalchemy/development.ini_tmpl
deleted file mode 100644
index d804a0b0e..000000000
--- a/pyramid/scaffolds/routesalchemy/development.ini_tmpl
+++ /dev/null
@@ -1,57 +0,0 @@
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = true
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.debug_templates = true
-pyramid.default_locale_name = en
-pyramid.includes = pyramid_debugtoolbar
- pyramid_tm
-
-sqlalchemy.url = sqlite:///%(here)s/{{project}}.db
-
-[server:main]
-use = egg:pyramid#wsgiref
-host = 0.0.0.0
-port = 6543
-
-# Begin logging configuration
-
-[loggers]
-keys = root, {{package_logger}}, sqlalchemy
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = INFO
-handlers = console
-
-[logger_{{package_logger}}]
-level = DEBUG
-handlers =
-qualname = {{package}}
-
-[logger_sqlalchemy]
-level = INFO
-handlers =
-qualname = sqlalchemy.engine
-# "level = INFO" logs SQL queries.
-# "level = DEBUG" logs SQL queries and results.
-# "level = WARN" logs neither. (Recommended for production systems.)
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/pyramid/scaffolds/routesalchemy/production.ini_tmpl b/pyramid/scaffolds/routesalchemy/production.ini_tmpl
deleted file mode 100644
index 7350ce25f..000000000
--- a/pyramid/scaffolds/routesalchemy/production.ini_tmpl
+++ /dev/null
@@ -1,56 +0,0 @@
-[app:main]
-use = egg:{{project}}
-
-pyramid.reload_templates = false
-pyramid.debug_authorization = false
-pyramid.debug_notfound = false
-pyramid.debug_routematch = false
-pyramid.debug_templates = false
-pyramid.default_locale_name = en
-pyramid.includes = pyramid_tm
-
-sqlalchemy.url = sqlite:///%(here)s/{{project}}.db
-
-[server:main]
-use = egg:pyramid#wsgiref
-host = 0.0.0.0
-port = 6543
-
-# Begin logging configuration
-
-[loggers]
-keys = root, {{package_logger}}, sqlalchemy
-
-[handlers]
-keys = console
-
-[formatters]
-keys = generic
-
-[logger_root]
-level = WARN
-handlers = console
-
-[logger_{{package_logger}}]
-level = WARN
-handlers =
-qualname = {{package}}
-
-[logger_sqlalchemy]
-level = WARN
-handlers =
-qualname = sqlalchemy.engine
-# "level = INFO" logs SQL queries.
-# "level = DEBUG" logs SQL queries and results.
-# "level = WARN" logs neither. (Recommended for production systems.)
-
-[handler_console]
-class = StreamHandler
-args = (sys.stderr,)
-level = NOTSET
-formatter = generic
-
-[formatter_generic]
-format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/pyramid/scaffolds/routesalchemy/setup.cfg_tmpl b/pyramid/scaffolds/routesalchemy/setup.cfg_tmpl
deleted file mode 100644
index 5bec29823..000000000
--- a/pyramid/scaffolds/routesalchemy/setup.cfg_tmpl
+++ /dev/null
@@ -1,27 +0,0 @@
-[nosetests]
-match=^test
-nocapture=1
-cover-package={{package}}
-with-coverage=1
-cover-erase=1
-
-[compile_catalog]
-directory = {{package}}/locale
-domain = {{project}}
-statistics = true
-
-[extract_messages]
-add_comments = TRANSLATORS:
-output_file = {{package}}/locale/{{project}}.pot
-width = 80
-
-[init_catalog]
-domain = {{project}}
-input_file = {{package}}/locale/{{project}}.pot
-output_dir = {{package}}/locale
-
-[update_catalog]
-domain = {{project}}
-input_file = {{package}}/locale/{{project}}.pot
-output_dir = {{package}}/locale
-previous = true
diff --git a/pyramid/scaffolds/routesalchemy/setup.py_tmpl b/pyramid/scaffolds/routesalchemy/setup.py_tmpl
deleted file mode 100644
index a2cdaac60..000000000
--- a/pyramid/scaffolds/routesalchemy/setup.py_tmpl
+++ /dev/null
@@ -1,46 +0,0 @@
-import os
-import sys
-
-from setuptools import setup, find_packages
-
-here = os.path.abspath(os.path.dirname(__file__))
-README = open(os.path.join(here, 'README.txt')).read()
-CHANGES = open(os.path.join(here, 'CHANGES.txt')).read()
-
-requires = [
- 'pyramid',
- 'SQLAlchemy',
- 'transaction',
- 'pyramid_tm',
- 'pyramid_debugtoolbar',
- 'zope.sqlalchemy',
- ]
-
-if sys.version_info[:3] < (2,5,0):
- requires.append('pysqlite')
-
-setup(name='{{project}}',
- version='0.0',
- description='{{project}}',
- long_description=README + '\n\n' + CHANGES,
- classifiers=[
- "Programming Language :: Python",
- "Framework :: Pylons",
- "Topic :: Internet :: WWW/HTTP",
- "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
- ],
- author='',
- author_email='',
- url='',
- keywords='web wsgi bfg pylons pyramid',
- packages=find_packages(),
- include_package_data=True,
- zip_safe=False,
- test_suite='{{package}}',
- install_requires = requires,
- entry_points = """\
- [paste.app_factory]
- main = {{package}}:main
- """,
- )
-
diff --git a/pyramid/scaffolds/tests.py b/pyramid/scaffolds/tests.py
index 3b257a18a..8efbb934b 100644
--- a/pyramid/scaffolds/tests.py
+++ b/pyramid/scaffolds/tests.py
@@ -66,7 +66,7 @@ class TemplateTest(object):
os.chdir(self.old_cwd)
if __name__ == '__main__': # pragma: no cover
- templates = ['starter', 'alchemy', 'routesalchemy',]
+ templates = ['starter', 'alchemy',]
if sys.version_info >= (2, 6) and sys.version_info < (3, 0):
templates.append('zodb')
diff --git a/setup.py b/setup.py
index b02459264..c6d1d237f 100644
--- a/setup.py
+++ b/setup.py
@@ -87,7 +87,6 @@ setup(name='pyramid',
[pyramid.scaffold]
starter=pyramid.scaffolds:StarterProjectTemplate
zodb=pyramid.scaffolds:ZODBProjectTemplate
- routesalchemy=pyramid.scaffolds:RoutesAlchemyProjectTemplate
alchemy=pyramid.scaffolds:AlchemyProjectTemplate
[console_scripts]
bfg2pyramid = pyramid.fixers.fix_bfg_imports:main