From 0e21c2abcf1174e73b139e7e78f599643d7f84e4 Mon Sep 17 00:00:00 2001 From: Michael Merickel Date: Thu, 4 Feb 2016 21:54:09 -0600 Subject: make models/__init__.py a template --- .../scaffolds/alchemy/+package+/models/__init__.py | 72 ---------------------- .../alchemy/+package+/models/__init__.py_tmpl | 72 ++++++++++++++++++++++ .../alchemy/+package+/views/errors.py_tmpl | 4 +- 3 files changed, 73 insertions(+), 75 deletions(-) delete mode 100644 pyramid/scaffolds/alchemy/+package+/models/__init__.py create mode 100644 pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl diff --git a/pyramid/scaffolds/alchemy/+package+/models/__init__.py b/pyramid/scaffolds/alchemy/+package+/models/__init__.py deleted file mode 100644 index c1ceacbf4..000000000 --- a/pyramid/scaffolds/alchemy/+package+/models/__init__.py +++ /dev/null @@ -1,72 +0,0 @@ -from sqlalchemy import engine_from_config -from sqlalchemy.orm import sessionmaker -from sqlalchemy.orm import configure_mappers -import zope.sqlalchemy - -# import or define all models here to ensure they are attached to the -# Base.metadata prior to any initialization routines -from .mymodel import MyModel # flake8: noqa - -# run configure_mappers after defining all of the models to ensure -# all relationships can be setup -configure_mappers() - - -def get_engine(settings, prefix='sqlalchemy.'): - return engine_from_config(settings, prefix) - - -def get_session_factory(engine): - factory = sessionmaker() - factory.configure(bind=engine) - return factory - - -def get_tm_session(session_factory, transaction_manager): - """ - Get a ``sqlalchemy.orm.Session`` instance backed by a transaction. - - This function will hook the session to the transaction manager which - will take care of committing any changes. - - - When using pyramid_tm it will automatically be committed or aborted - depending on whether an exception is raised. - - - When using scripts you should wrap the session in a manager yourself. - For example:: - - import transaction - - engine = get_engine(settings) - session_factory = get_session_factory(engine) - with transaction.manager: - dbsession = get_tm_session(session_factory, transaction.manager) - - """ - dbsession = session_factory() - zope.sqlalchemy.register( - dbsession, transaction_manager=transaction_manager) - return dbsession - - -def includeme(config): - """ - Initialize the model for a Pyramid app. - - Activate this setup using ``config.include('{{package}}.models')``. - - """ - settings = config.get_settings() - - # use pyramid_tm to hook the transaction lifecycle to the request - config.include('pyramid_tm') - - session_factory = get_session_factory(get_engine(settings)) - - # make request.dbsession available for use in Pyramid - config.add_request_method( - # r.tm is the transaction manager used by pyramid_tm - lambda r: get_tm_session(session_factory, r.tm), - 'dbsession', - reify=True - ) diff --git a/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl b/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl new file mode 100644 index 000000000..7d0c94a14 --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/models/__init__.py_tmpl @@ -0,0 +1,72 @@ +from sqlalchemy import engine_from_config +from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import configure_mappers +import zope.sqlalchemy + +# import or define all models here to ensure they are attached to the +# Base.metadata prior to any initialization routines +from .mymodel import MyModel # flake8: noqa + +# run configure_mappers after defining all of the models to ensure +# all relationships can be setup +configure_mappers() + + +def get_engine(settings, prefix='sqlalchemy.'): + return engine_from_config(settings, prefix) + + +def get_session_factory(engine): + factory = sessionmaker() + factory.configure(bind=engine) + return factory + + +def get_tm_session(session_factory, transaction_manager): + """ + Get a ``sqlalchemy.orm.Session`` instance backed by a transaction. + + This function will hook the session to the transaction manager which + will take care of committing any changes. + + - When using pyramid_tm it will automatically be committed or aborted + depending on whether an exception is raised. + + - When using scripts you should wrap the session in a manager yourself. + For example:: + + import transaction + + engine = get_engine(settings) + session_factory = get_session_factory(engine) + with transaction.manager: + dbsession = get_tm_session(session_factory, transaction.manager) + + """ + dbsession = session_factory() + zope.sqlalchemy.register( + dbsession, transaction_manager=transaction_manager) + return dbsession + + +def includeme(config): + """ + Initialize the model for a Pyramid app. + + Activate this setup using ``config.include('{{project}}.models')``. + + """ + settings = config.get_settings() + + # use pyramid_tm to hook the transaction lifecycle to the request + config.include('pyramid_tm') + + session_factory = get_session_factory(get_engine(settings)) + + # make request.dbsession available for use in Pyramid + config.add_request_method( + # r.tm is the transaction manager used by pyramid_tm + lambda r: get_tm_session(session_factory, r.tm), + 'dbsession', + reify=True + ) diff --git a/pyramid/scaffolds/alchemy/+package+/views/errors.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views/errors.py_tmpl index 3a20f8487..a4b8201f1 100644 --- a/pyramid/scaffolds/alchemy/+package+/views/errors.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/views/errors.py_tmpl @@ -1,6 +1,4 @@ -from pyramid.view import ( - notfound_view_config, -) +from pyramid.view import notfound_view_config @notfound_view_config(renderer='../templates/404.jinja2') def notfound_view(request): -- cgit v1.2.3