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