From c96ca8631d7899b2fe6770180b066fbec031473d Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 21 Nov 2011 13:31:23 -0500 Subject: rejigger alchemy scaffold as per convo with Mike --- TODO.txt | 4 +--- pyramid/scaffolds/alchemy/+package+/__init__.py | 16 +++++++++++++ .../scaffolds/alchemy/+package+/__init__.py_tmpl | 18 --------------- pyramid/scaffolds/alchemy/+package+/models.py | 18 --------------- .../alchemy/+package+/scripts/__init__.py | 1 + .../alchemy/+package+/scripts/populate.py | 27 ++++++++++++++++++++++ pyramid/scaffolds/alchemy/+package+/tests.py_tmpl | 26 +++++++++++++-------- pyramid/scaffolds/alchemy/+package+/views.py_tmpl | 12 ++++++---- pyramid/scaffolds/alchemy/setup.py_tmpl | 2 ++ 9 files changed, 71 insertions(+), 53 deletions(-) create mode 100644 pyramid/scaffolds/alchemy/+package+/__init__.py delete mode 100644 pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl create mode 100644 pyramid/scaffolds/alchemy/+package+/scripts/__init__.py create mode 100644 pyramid/scaffolds/alchemy/+package+/scripts/populate.py diff --git a/TODO.txt b/TODO.txt index 2a5239629..f13cd5c6c 100644 --- a/TODO.txt +++ b/TODO.txt @@ -6,9 +6,7 @@ Must-Have - Fix SQLA tutorial to match ZODB tutorial. -- Fix routesalchemy scaffold to match ZODB scaffold. - -- Remove alchemy scaffold. +- Fix SQLA tutorial to match alchemy scaffold. Nice-to-Have ------------ diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py b/pyramid/scaffolds/alchemy/+package+/__init__.py new file mode 100644 index 000000000..253341563 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/__init__.py @@ -0,0 +1,16 @@ +from pyramid.config import Configurator +from sqlalchemy import engine_from_config + +from .models import DBSession + +def main(global_config, **settings): + """ This function returns a Pyramid WSGI application. + """ + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + config = Configurator(settings=settings) + config.add_static_view('static', 'static', cache_max_age=3600) + config.add_route('home', '/') + config.scan() + return config.make_wsgi_app() + diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl b/pyramid/scaffolds/alchemy/+package+/__init__.py_tmpl deleted file mode 100644 index 24201912b..000000000 --- a/pyramid/scaffolds/alchemy/+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/alchemy/+package+/models.py b/pyramid/scaffolds/alchemy/+package+/models.py index bef483d3a..000dadd91 100644 --- a/pyramid/scaffolds/alchemy/+package+/models.py +++ b/pyramid/scaffolds/alchemy/+package+/models.py @@ -1,10 +1,7 @@ -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 @@ -25,18 +22,3 @@ class MyModel(Base): 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/alchemy/+package+/scripts/__init__.py b/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py new file mode 100644 index 000000000..5bb534f79 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/scripts/__init__.py @@ -0,0 +1 @@ +# package diff --git a/pyramid/scaffolds/alchemy/+package+/scripts/populate.py b/pyramid/scaffolds/alchemy/+package+/scripts/populate.py new file mode 100644 index 000000000..5d367c987 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/scripts/populate.py @@ -0,0 +1,27 @@ +import os +import sys + +from paste.deploy.loadwsgi import appconfig +from sqlalchemy import engine_from_config +import transaction + +from ..models import DBSession +from ..models import MyModel +from ..models import Base + +def usage(argv): + print('usage: %s ' % os.path.basename(argv[0])) + sys.exit(1) + +def main(argv=sys.argv): + try: + config_filename = argv[1] + except IndexError: + usage(argv) + settings = appconfig('config:' + os.path.abspath(config_filename)) + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + Base.metadata.create_all(engine) + with transaction.manager: + model = MyModel(name=u'first', value=55) + DBSession.add(model) diff --git a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl index 29aea7258..229caa8d8 100644 --- a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl @@ -1,24 +1,32 @@ import unittest -from pyramid.config import Configurator +import transaction + 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 +from .models import DBSession class TestMyView(unittest.TestCase): def setUp(self): self.config = testing.setUp() - _initTestingDB() + from sqlalchemy import create_engine + engine = create_engine('sqlite://') + from .models import ( + Base, + MyModel, + ) + DBSession.configure(bind=engine) + Base.metadata.create_all(engine) + with transaction.manager: + model = MyModel(name=u'first', value=55) + DBSession.add(model) def tearDown(self): + DBSession.remove() testing.tearDown() def test_it(self): - from {{package}}.views import my_view + from .views import my_view request = testing.DummyRequest() info = my_view(request) - self.assertEqual(info['root'].name, 'root') + self.assertEqual(info['first'].name, 'first') self.assertEqual(info['project'], '{{project}}') diff --git a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl index 45532b47b..69dbfd9ba 100644 --- a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl @@ -1,7 +1,9 @@ -from {{package}}.models import DBSession -from {{package}}.models import MyModel +from pyramid.view import view_config +from .models import DBSession +from .models import MyModel + +@view_config(route_name='home', renderer='templates/mytemplate.pt') def my_view(request): - dbsession = DBSession() - root = dbsession.query(MyModel).filter(MyModel.name=='root').first() - return {'root':root, 'project':'{{project}}'} + first = DBSession.query(MyModel).filter(MyModel.name==u'first').first() + return {'first':first, 'project':'{{project}}'} diff --git a/pyramid/scaffolds/alchemy/setup.py_tmpl b/pyramid/scaffolds/alchemy/setup.py_tmpl index a2cdaac60..a2766547d 100644 --- a/pyramid/scaffolds/alchemy/setup.py_tmpl +++ b/pyramid/scaffolds/alchemy/setup.py_tmpl @@ -41,6 +41,8 @@ setup(name='{{project}}', entry_points = """\ [paste.app_factory] main = {{package}}:main + [console_scripts] + populate_{{project}} = {{package}}.scripts.populate:main """, ) -- cgit v1.2.3