From ecee85c8a87e2440abd1aeda3d1043b01cf1f4ab Mon Sep 17 00:00:00 2001 From: Chris McDonough <chrism@plope.com> Date: Mon, 22 Nov 2010 08:30:48 +0100 Subject: [PATCH] work towards https://github.com/Pylons/pyramid/issues#issue/44 --- pyramid/paster_templates/pylons_sqla/+package+/scripts.py_tmpl | 25 ++++++++ /dev/null | 46 --------------- pyramid/paster_templates/pylons_sqla/+package+/models/__init__.py | 17 +++++ pyramid/paster_templates/pylons_sqla/+package+/tests.py_tmpl | 15 ++++- pyramid/paster_templates/pylons_sqla/+package+/models/mymodel.py_tmpl | 21 +++++++ pyramid/paster_templates/pylons_sqla/setup.py_tmpl | 2 pyramid/paster_templates/pylons_sqla/+package+/__init__.py_tmpl | 7 - pyramid/paster_templates/pylons_sqla/+package+/handlers.py_tmpl | 2 8 files changed, 80 insertions(+), 55 deletions(-) diff --git a/pyramid/paster_templates/pylons_sqla/+package+/__init__.py_tmpl b/pyramid/paster_templates/pylons_sqla/+package+/__init__.py_tmpl index b67a2c3..e9e03cf 100644 --- a/pyramid/paster_templates/pylons_sqla/+package+/__init__.py_tmpl +++ b/pyramid/paster_templates/pylons_sqla/+package+/__init__.py_tmpl @@ -2,15 +2,12 @@ from pyramid_beaker import session_factory_from_settings -from sqlalchemy import engine_from_config - -from {{package}}.models import initialize_sql +from {{package}}.models import init_model def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ - engine = engine_from_config(settings, 'sqlalchemy.') - initialize_sql(engine) + init_model(settings) config = Configurator(settings=settings) session_factory = session_factory_from_settings(settings) config.set_session_factory(session_factory) diff --git a/pyramid/paster_templates/pylons_sqla/+package+/handlers.py_tmpl b/pyramid/paster_templates/pylons_sqla/+package+/handlers.py_tmpl index afc8aa4..a08fc27 100644 --- a/pyramid/paster_templates/pylons_sqla/+package+/handlers.py_tmpl +++ b/pyramid/paster_templates/pylons_sqla/+package+/handlers.py_tmpl @@ -1,6 +1,6 @@ from pyramid.view import action -from {{package}}.models import MyModel +from {{package}}.models.mymodel import MyModel class MyHandler(object): def __init__(self, request): diff --git a/pyramid/paster_templates/pylons_sqla/+package+/models.py b/pyramid/paster_templates/pylons_sqla/+package+/models.py deleted file mode 100644 index 6418f0c..0000000 --- a/pyramid/paster_templates/pylons_sqla/+package+/models.py +++ /dev/null @@ -1,46 +0,0 @@ -import transaction - -from sqlalchemy import create_engine -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 - - @classmethod - def by_name(cls, name=None): - return DBSession.query(cls).filter(cls.name == name).first() - -def populate(): - model = MyModel(name=u'root', value=55) - DBSession.add(model) - DBSession.flush() - transaction.commit() - -def initialize_sql(engine): - DBSession.configure(bind=engine) - Base.metadata.bind = engine - Base.metadata.create_all(engine) - try: - populate() - except IntegrityError: - pass diff --git a/pyramid/paster_templates/pylons_sqla/+package+/models/__init__.py b/pyramid/paster_templates/pylons_sqla/+package+/models/__init__.py new file mode 100644 index 0000000..3a37d2c --- /dev/null +++ b/pyramid/paster_templates/pylons_sqla/+package+/models/__init__.py @@ -0,0 +1,17 @@ +from sqlalchemy import engine_from_config + +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() + +def init_model(settings): + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + Base.metadata.bind = engine + return engine diff --git a/pyramid/paster_templates/pylons_sqla/+package+/models/mymodel.py_tmpl b/pyramid/paster_templates/pylons_sqla/+package+/models/mymodel.py_tmpl new file mode 100644 index 0000000..e60260e --- /dev/null +++ b/pyramid/paster_templates/pylons_sqla/+package+/models/mymodel.py_tmpl @@ -0,0 +1,21 @@ +from sqlalchemy import Column +from sqlalchemy import Integer +from sqlalchemy import Unicode + +from {{package}}.models import Base +from {{package}}.models import DBSession + +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 + + @classmethod + def by_name(cls, name=None): + return DBSession.query(cls).filter(cls.name == name).first() + diff --git a/pyramid/paster_templates/pylons_sqla/+package+/scripts.py_tmpl b/pyramid/paster_templates/pylons_sqla/+package+/scripts.py_tmpl new file mode 100644 index 0000000..67c020d --- /dev/null +++ b/pyramid/paster_templates/pylons_sqla/+package+/scripts.py_tmpl @@ -0,0 +1,25 @@ +import os +import pkg_resources +import sys +import transaction + +from paste.deploy.loadwsgi import appconfig + +from {{package}}.models import init_model +from {{package}}.models import Base +from {{package}}.models import DBSession +from {{package}}.models.mymodel import MyModel + +def setup(argv=sys.argv): + dist = pkg_resources.get_distribution('{{project}}') + root = dist.location + config = 'config:' + os.path.join(root, 'development.ini') + settings = appconfig(config, "{{project}}") + engine = init_model(settings) + DBSession.configure(bind=engine) + Base.metadata.bind = engine + Base.metadata.create_all(engine) + model = MyModel(name=u'root', value=55) + DBSession.add(model) + DBSession.flush() + transaction.commit() diff --git a/pyramid/paster_templates/pylons_sqla/+package+/tests.py_tmpl b/pyramid/paster_templates/pylons_sqla/+package+/tests.py_tmpl index b55760b..c8f8d07 100644 --- a/pyramid/paster_templates/pylons_sqla/+package+/tests.py_tmpl +++ b/pyramid/paster_templates/pylons_sqla/+package+/tests.py_tmpl @@ -3,20 +3,29 @@ class MyHandlerTests(unittest.TestCase): def setUp(self): from pyramid.configuration import Configurator - from sqlalchemy import create_engine - from {{package}}.models import initialize_sql - self.session = initialize_sql(create_engine('sqlite://')) self.config = Configurator() self.config.begin() def tearDown(self): self.config.end() + def _initSQL(self): + from {{package}}.models import Base + from {{package}}.models import DBSession + from {{package}}.models import init_model + from {{package}}.models.mymodel import MyModel + engine = init_model({'sqlalchemy.url':'sqlite:///'}) + Base.metadata.create_all(engine) + model = MyModel(name=u'root', value=55) + DBSession.add(model) + DBSession.flush() + def _makeOne(self, request): from {{package}}.handlers import MyHandler return MyHandler(request) def test_index(self): + self._initSQL() request = DummyRequest() handler = self._makeOne(request) info = handler.index() diff --git a/pyramid/paster_templates/pylons_sqla/setup.py_tmpl b/pyramid/paster_templates/pylons_sqla/setup.py_tmpl index 578d186..3ddc7c3 100644 --- a/pyramid/paster_templates/pylons_sqla/setup.py_tmpl +++ b/pyramid/paster_templates/pylons_sqla/setup.py_tmpl @@ -43,6 +43,8 @@ entry_points = """\ [paste.app_factory] main = {{package}}:main + [console_scripts] + setup-{{project}} = {{package}}.scripts:setup """, paster_plugins=['pyramid'], ) -- Gitblit v1.9.3