From d20282e5b5b6d37183f7ab70226b319d8d8dc0eb Mon Sep 17 00:00:00 2001 From: Marcin Lulek Date: Wed, 21 Oct 2015 21:15:57 +0200 Subject: alchemy: change file structure to modules for views and models --- pyramid/scaffolds/alchemy/+package+/__init__.py | 2 +- pyramid/scaffolds/alchemy/+package+/models.py | 62 ---------------------- .../scaffolds/alchemy/+package+/models/__init__.py | 3 ++ pyramid/scaffolds/alchemy/+package+/models/meta.py | 47 ++++++++++++++++ .../scaffolds/alchemy/+package+/models/mymodel.py | 16 ++++++ .../alchemy/+package+/scripts/initializedb.py | 4 +- pyramid/scaffolds/alchemy/+package+/tests.py_tmpl | 14 ++--- pyramid/scaffolds/alchemy/+package+/views.py_tmpl | 33 ------------ .../scaffolds/alchemy/+package+/views/__init__.py | 0 .../alchemy/+package+/views/default.py_tmpl | 33 ++++++++++++ 10 files changed, 109 insertions(+), 105 deletions(-) delete mode 100644 pyramid/scaffolds/alchemy/+package+/models.py create mode 100644 pyramid/scaffolds/alchemy/+package+/models/__init__.py create mode 100644 pyramid/scaffolds/alchemy/+package+/models/meta.py create mode 100644 pyramid/scaffolds/alchemy/+package+/models/mymodel.py delete mode 100644 pyramid/scaffolds/alchemy/+package+/views.py_tmpl create mode 100644 pyramid/scaffolds/alchemy/+package+/views/__init__.py create mode 100644 pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py b/pyramid/scaffolds/alchemy/+package+/__init__.py index 116839351..06ca7580d 100644 --- a/pyramid/scaffolds/alchemy/+package+/__init__.py +++ b/pyramid/scaffolds/alchemy/+package+/__init__.py @@ -5,7 +5,7 @@ def main(global_config, **settings): """ config = Configurator(settings=settings) config.include('pyramid_chameleon') - config.include('.models') + config.include('.models.meta') config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') config.scan() diff --git a/pyramid/scaffolds/alchemy/+package+/models.py b/pyramid/scaffolds/alchemy/+package+/models.py deleted file mode 100644 index 832e67b37..000000000 --- a/pyramid/scaffolds/alchemy/+package+/models.py +++ /dev/null @@ -1,62 +0,0 @@ -from sqlalchemy import ( - Column, - Index, - Integer, - Text, - ) - -from sqlalchemy import engine_from_config -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker -from sqlalchemy.schema import MetaData -import zope.sqlalchemy - -NAMING_CONVENTION = { - "ix": 'ix_%(column_0_label)s', - "uq": "uq_%(table_name)s_%(column_0_name)s", - "ck": "ck_%(table_name)s_%(constraint_name)s", - "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", - "pk": "pk_%(table_name)s" -} - -metadata = MetaData(naming_convention=NAMING_CONVENTION) -Base = declarative_base(metadata=metadata) - - -def includeme(config): - settings = config.get_settings() - dbmaker = get_dbmaker(get_engine(settings)) - - config.add_request_method( - lambda r: get_session(r.tm, dbmaker), - 'dbsession', - reify=True - ) - - config.include('pyramid_tm') - - -def get_session(transaction_manager, dbmaker): - dbsession = dbmaker() - zope.sqlalchemy.register(dbsession, transaction_manager=transaction_manager) - return dbsession - - -def get_engine(settings, prefix='sqlalchemy.'): - return engine_from_config(settings, prefix) - - -def get_dbmaker(engine): - dbmaker = sessionmaker() - dbmaker.configure(bind=engine) - return dbmaker - - -class MyModel(Base): - __tablename__ = 'models' - id = Column(Integer, primary_key=True) - name = Column(Text) - value = Column(Integer) - - -Index('my_index', MyModel.name, unique=True, mysql_length=255) diff --git a/pyramid/scaffolds/alchemy/+package+/models/__init__.py b/pyramid/scaffolds/alchemy/+package+/models/__init__.py new file mode 100644 index 000000000..01c31e497 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/models/__init__.py @@ -0,0 +1,3 @@ +# import all models classes here for sqlalchemy mappers +# to pick up +from .mymodel import MyModel diff --git a/pyramid/scaffolds/alchemy/+package+/models/meta.py b/pyramid/scaffolds/alchemy/+package+/models/meta.py new file mode 100644 index 000000000..f66d1e5ec --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/models/meta.py @@ -0,0 +1,47 @@ +from sqlalchemy import engine_from_config +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +from sqlalchemy.schema import MetaData +import zope.sqlalchemy + +NAMING_CONVENTION = { + "ix": 'ix_%(column_0_label)s', + "uq": "uq_%(table_name)s_%(column_0_name)s", + "ck": "ck_%(table_name)s_%(constraint_name)s", + "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", + "pk": "pk_%(table_name)s" +} + +metadata = MetaData(naming_convention=NAMING_CONVENTION) +Base = declarative_base(metadata=metadata) + + +def includeme(config): + settings = config.get_settings() + dbmaker = get_dbmaker(get_engine(settings)) + + config.add_request_method( + lambda r: get_session(r.tm, dbmaker), + 'dbsession', + reify=True + ) + + config.include('pyramid_tm') + + +def get_session(transaction_manager, dbmaker): + dbsession = dbmaker() + zope.sqlalchemy.register(dbsession, transaction_manager=transaction_manager) + return dbsession + + +def get_engine(settings, prefix='sqlalchemy.'): + return engine_from_config(settings, prefix) + + +def get_dbmaker(engine): + dbmaker = sessionmaker() + dbmaker.configure(bind=engine) + return dbmaker + + diff --git a/pyramid/scaffolds/alchemy/+package+/models/mymodel.py b/pyramid/scaffolds/alchemy/+package+/models/mymodel.py new file mode 100644 index 000000000..b4191aa55 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/models/mymodel.py @@ -0,0 +1,16 @@ +from .meta import Base +from sqlalchemy import ( + Column, + Index, + Integer, + Text, +) + +class MyModel(Base): + __tablename__ = 'models' + id = Column(Integer, primary_key=True) + name = Column(Text) + value = Column(Integer) + + +Index('my_index', MyModel.name, unique=True, mysql_length=255) diff --git a/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py index 43e25bff8..f0d09729e 100644 --- a/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py +++ b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py @@ -9,13 +9,13 @@ from pyramid.paster import ( from pyramid.scripts.common import parse_vars -from ..models import ( - MyModel, +from ..models.meta import ( Base, get_session, get_engine, get_dbmaker, ) +from ..models.mymodel import MyModel def usage(argv): diff --git a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl index 4ce706077..074c7a773 100644 --- a/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/tests.py_tmpl @@ -13,10 +13,10 @@ class BaseTest(unittest.TestCase): self.config = testing.setUp(settings={ 'sqlalchemy.url': 'sqlite:///:memory:' }) - self.config.include('.models') + self.config.include('.models.meta') settings = self.config.get_settings() - from .models import ( + from .models.meta import ( get_session, get_engine, get_dbmaker, @@ -28,11 +28,11 @@ class BaseTest(unittest.TestCase): self.session = get_session(transaction.manager, dbmaker) def init_database(self): - from .models import Base + from .models.meta import Base Base.metadata.create_all(self.engine) def tearDown(self): - from .models import Base + from .models.meta import Base testing.tearDown() transaction.abort() @@ -45,13 +45,13 @@ class TestMyViewSuccessCondition(BaseTest): super(TestMyViewSuccessCondition, self).setUp() self.init_database() - from .models import MyModel + from .models.mymodel import MyModel model = MyModel(name='one', value=55) self.session.add(model) def test_passing_view(self): - from .views import my_view + from .views.default import my_view info = my_view(dummy_request(self.session)) self.assertEqual(info['one'].name, 'one') self.assertEqual(info['project'], '{{project}}') @@ -60,6 +60,6 @@ class TestMyViewSuccessCondition(BaseTest): class TestMyViewFailureCondition(BaseTest): def test_failing_view(self): - from .views import my_view + from .views.default import my_view info = my_view(dummy_request(self.session)) self.assertEqual(info.status_int, 500) diff --git a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl deleted file mode 100644 index b559b31ce..000000000 --- a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl +++ /dev/null @@ -1,33 +0,0 @@ -from pyramid.response import Response -from pyramid.view import view_config - -from sqlalchemy.exc import DBAPIError - -from .models import MyModel - - -@view_config(route_name='home', renderer='templates/mytemplate.pt') -def my_view(request): - try: - one = request.dbsession.query(MyModel).filter(MyModel.name == 'one').first() - except DBAPIError: - return Response(conn_err_msg, content_type='text/plain', status_int=500) - return {'one': one, 'project': '{{project}}'} - - -conn_err_msg = """\ -Pyramid is having a problem using your SQL database. The problem -might be caused by one of the following things: - -1. You may need to run the "initialize_{{project}}_db" script - to initialize your database tables. Check your virtual - environment's "bin" directory for this script and try to run it. - -2. Your database server may not be running. Check that the - database server referred to by the "sqlalchemy.url" setting in - your "development.ini" file is running. - -After you fix the problem, please restart the Pyramid application to -try it again. -""" - diff --git a/pyramid/scaffolds/alchemy/+package+/views/__init__.py b/pyramid/scaffolds/alchemy/+package+/views/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl new file mode 100644 index 000000000..9dc8e233f --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl @@ -0,0 +1,33 @@ +from pyramid.response import Response +from pyramid.view import view_config + +from sqlalchemy.exc import DBAPIError + +from ..models.mymodel import MyModel + + +@view_config(route_name='home', renderer='../templates/mytemplate.pt') +def my_view(request): + try: + one = request.dbsession.query(MyModel).filter(MyModel.name == 'one').first() + except DBAPIError: + return Response(conn_err_msg, content_type='text/plain', status_int=500) + return {'one': one, 'project': '{{project}}'} + + +conn_err_msg = """\ +Pyramid is having a problem using your SQL database. The problem +might be caused by one of the following things: + +1. You may need to run the "initialize_{{project}}_db" script + to initialize your database tables. Check your virtual + environment's "bin" directory for this script and try to run it. + +2. Your database server may not be running. Check that the + database server referred to by the "sqlalchemy.url" setting in + your "development.ini" file is running. + +After you fix the problem, please restart the Pyramid application to +try it again. +""" + -- cgit v1.2.3 From a5d3f40eb9ceda62d17f43a3c3515b8aa31630b6 Mon Sep 17 00:00:00 2001 From: Marcin Lulek Date: Wed, 21 Oct 2015 21:47:54 +0200 Subject: alchemy: use jinja2 as default templating engine --- pyramid/scaffolds/alchemy/+package+/__init__.py | 2 +- .../alchemy/+package+/templates/layout.jinja2_tmpl | 66 +++++++++++++++++++++ .../+package+/templates/mytemplate.jinja2_tmpl | 8 +++ .../alchemy/+package+/templates/mytemplate.pt_tmpl | 67 ---------------------- .../alchemy/+package+/views/default.py_tmpl | 2 +- pyramid/scaffolds/alchemy/setup.py_tmpl | 2 +- 6 files changed, 77 insertions(+), 70 deletions(-) create mode 100644 pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl create mode 100644 pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl delete mode 100644 pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py b/pyramid/scaffolds/alchemy/+package+/__init__.py index 06ca7580d..3a510a14f 100644 --- a/pyramid/scaffolds/alchemy/+package+/__init__.py +++ b/pyramid/scaffolds/alchemy/+package+/__init__.py @@ -4,7 +4,7 @@ def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings) - config.include('pyramid_chameleon') + config.include('pyramid_jinja2') config.include('.models.meta') config.add_static_view('static', 'static', cache_max_age=3600) config.add_route('home', '/') diff --git a/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl new file mode 100644 index 000000000..51e382654 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/templates/layout.jinja2_tmpl @@ -0,0 +1,66 @@ + + + + + + + + + + + Alchemy Scaffold for The Pyramid Web Framework + + + + + + + + + + + + + +
+
+
+
+ +
+
+ {% block content %} +

No content

+ {% endblock content %} +
+
+
+ +
+
+ +
+
+
+ + + + + + + + diff --git a/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl new file mode 100644 index 000000000..01fe5b8e3 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.jinja2_tmpl @@ -0,0 +1,8 @@ +{% extends "layout.jinja2" %} + +{% block content %} +
+

Pyramid Alchemy scaffold

+

Welcome to \{\{project\}\}, an application generated by
the Pyramid Web Framework {{pyramid_version}}.

+
+{% endblock content %} diff --git a/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl b/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl deleted file mode 100644 index 3f1d23d47..000000000 --- a/pyramid/scaffolds/alchemy/+package+/templates/mytemplate.pt_tmpl +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - Alchemy Scaffold for The Pyramid Web Framework - - - - - - - - - - - - - -
-
-
-
- -
-
-
-

Pyramid Alchemy scaffold

-

Welcome to ${project}, an application generated by
the Pyramid Web Framework {{pyramid_version}}.

-
-
-
-
- -
-
- -
-
-
- - - - - - - - diff --git a/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl index 9dc8e233f..027bb2934 100644 --- a/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl @@ -6,7 +6,7 @@ from sqlalchemy.exc import DBAPIError from ..models.mymodel import MyModel -@view_config(route_name='home', renderer='../templates/mytemplate.pt') +@view_config(route_name='home', renderer='../templates/mytemplate.jinja2') def my_view(request): try: one = request.dbsession.query(MyModel).filter(MyModel.name == 'one').first() diff --git a/pyramid/scaffolds/alchemy/setup.py_tmpl b/pyramid/scaffolds/alchemy/setup.py_tmpl index 9496b9948..af193a73d 100644 --- a/pyramid/scaffolds/alchemy/setup.py_tmpl +++ b/pyramid/scaffolds/alchemy/setup.py_tmpl @@ -10,7 +10,7 @@ with open(os.path.join(here, 'CHANGES.txt')) as f: requires = [ 'pyramid', - 'pyramid_chameleon', + 'pyramid_jinja2', 'pyramid_debugtoolbar', 'pyramid_tm', 'SQLAlchemy', -- cgit v1.2.3 From fd260cb9cdc3a687073827fa85dcf15eecff0dc4 Mon Sep 17 00:00:00 2001 From: Marcin Lulek Date: Thu, 22 Oct 2015 00:27:34 +0200 Subject: flake8: make the linter happy --- pyramid/scaffolds/alchemy/+package+/__init__.py | 1 + pyramid/scaffolds/alchemy/+package+/models/__init__.py | 2 +- pyramid/scaffolds/alchemy/+package+/models/meta.py | 5 ++--- pyramid/scaffolds/alchemy/+package+/models/mymodel.py | 1 + pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl | 8 ++++---- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pyramid/scaffolds/alchemy/+package+/__init__.py b/pyramid/scaffolds/alchemy/+package+/__init__.py index 3a510a14f..7994bbfa8 100644 --- a/pyramid/scaffolds/alchemy/+package+/__init__.py +++ b/pyramid/scaffolds/alchemy/+package+/__init__.py @@ -1,5 +1,6 @@ from pyramid.config import Configurator + def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ diff --git a/pyramid/scaffolds/alchemy/+package+/models/__init__.py b/pyramid/scaffolds/alchemy/+package+/models/__init__.py index 01c31e497..a6fe0d6ee 100644 --- a/pyramid/scaffolds/alchemy/+package+/models/__init__.py +++ b/pyramid/scaffolds/alchemy/+package+/models/__init__.py @@ -1,3 +1,3 @@ # import all models classes here for sqlalchemy mappers # to pick up -from .mymodel import MyModel +from .mymodel import MyModel # flake8: noqa diff --git a/pyramid/scaffolds/alchemy/+package+/models/meta.py b/pyramid/scaffolds/alchemy/+package+/models/meta.py index f66d1e5ec..b72b45f9f 100644 --- a/pyramid/scaffolds/alchemy/+package+/models/meta.py +++ b/pyramid/scaffolds/alchemy/+package+/models/meta.py @@ -31,7 +31,8 @@ def includeme(config): def get_session(transaction_manager, dbmaker): dbsession = dbmaker() - zope.sqlalchemy.register(dbsession, transaction_manager=transaction_manager) + zope.sqlalchemy.register(dbsession, + transaction_manager=transaction_manager) return dbsession @@ -43,5 +44,3 @@ def get_dbmaker(engine): dbmaker = sessionmaker() dbmaker.configure(bind=engine) return dbmaker - - diff --git a/pyramid/scaffolds/alchemy/+package+/models/mymodel.py b/pyramid/scaffolds/alchemy/+package+/models/mymodel.py index b4191aa55..5a2b5890c 100644 --- a/pyramid/scaffolds/alchemy/+package+/models/mymodel.py +++ b/pyramid/scaffolds/alchemy/+package+/models/mymodel.py @@ -6,6 +6,7 @@ from sqlalchemy import ( Text, ) + class MyModel(Base): __tablename__ = 'models' id = Column(Integer, primary_key=True) diff --git a/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl index 027bb2934..43fb33e05 100644 --- a/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/views/default.py_tmpl @@ -9,13 +9,14 @@ from ..models.mymodel import MyModel @view_config(route_name='home', renderer='../templates/mytemplate.jinja2') def my_view(request): try: - one = request.dbsession.query(MyModel).filter(MyModel.name == 'one').first() + query = request.dbsession.query(MyModel) + one = query.filter(MyModel.name == 'one').first() except DBAPIError: - return Response(conn_err_msg, content_type='text/plain', status_int=500) + return Response(db_err_msg, content_type='text/plain', status_int=500) return {'one': one, 'project': '{{project}}'} -conn_err_msg = """\ +db_err_msg = """\ Pyramid is having a problem using your SQL database. The problem might be caused by one of the following things: @@ -30,4 +31,3 @@ might be caused by one of the following things: After you fix the problem, please restart the Pyramid application to try it again. """ - -- cgit v1.2.3