From 0da8d191a5e11d7cd4aaec6ada267857fb5fa4a3 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 14 Mar 2012 13:56:57 -0700 Subject: remove confusing output related to issue #481 --- pyramid/scaffolds/__init__.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pyramid/scaffolds/__init__.py b/pyramid/scaffolds/__init__.py index ad5753713..d8fb9a62f 100644 --- a/pyramid/scaffolds/__init__.py +++ b/pyramid/scaffolds/__init__.py @@ -1,6 +1,5 @@ import binascii import os -import sys from pyramid.compat import native_ @@ -51,16 +50,3 @@ class ZODBProjectTemplate(PyramidTemplate): class AlchemyProjectTemplate(PyramidTemplate): _template_dir = 'alchemy' summary = 'Pyramid SQLAlchemy project using url dispatch' - def post(self, command, output_dir, vars): # pragma: no cover - val = PyramidTemplate.post(self, command, output_dir, vars) - vars = vars.copy() - vars['output_dir'] = output_dir - vars['pybin'] = os.path.join(sys.exec_prefix, 'bin') - self.out('') - self.out('Please run the "populate_%(project)s" script to set up the ' - 'SQL database after\ninstalling (but before starting) the ' - 'application.\n\n For example:\n\ncd %(output_dir)s\n' - '%(pybin)s/python setup.py develop\n' - '%(pybin)s/populate_%(project)s development.ini' - % vars) - return val -- cgit v1.2.3 From a678380044bdb762fbff7559dc2f9b7e671e5337 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 14 Mar 2012 14:43:08 -0700 Subject: Changes to support #481. - The ``alchemy`` scaffold now shows an informative error message in the browser if the person creating the project forgets to run the initialization script. - The ``alchemy`` scaffold initialization script is now called ``initialize__db`` instead of ``populate_``. --- CHANGES.txt | 10 +++++++ .../alchemy/+package+/scripts/initializedb.py | 35 ++++++++++++++++++++++ .../alchemy/+package+/scripts/populate.py | 35 ---------------------- pyramid/scaffolds/alchemy/+package+/views.py_tmpl | 25 +++++++++++++++- pyramid/scaffolds/alchemy/setup.py_tmpl | 2 +- 5 files changed, 70 insertions(+), 37 deletions(-) create mode 100644 pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py delete mode 100644 pyramid/scaffolds/alchemy/+package+/scripts/populate.py diff --git a/CHANGES.txt b/CHANGES.txt index abdb3d80a..33db7b956 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,16 @@ Bug Fixes - ``config.add_view()`` raised AttributeError involving ``__text__``. See https://github.com/Pylons/pyramid/issues/461 +Scaffolds +--------- + +- The ``alchemy`` scaffold now shows an informative error message in the + browser if the person creating the project forgets to run the + initialization script. + +- The ``alchemy`` scaffold initialization script is now called + ``initialize__db`` instead of ``populate_``. + 1.3b2 (2012-03-02) ================== diff --git a/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py new file mode 100644 index 000000000..0e828465f --- /dev/null +++ b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py @@ -0,0 +1,35 @@ +import os +import sys +import transaction + +from sqlalchemy import engine_from_config + +from pyramid.paster import ( + get_appsettings, + setup_logging, + ) + +from ..models import ( + DBSession, + MyModel, + Base, + ) + +def usage(argv): + cmd = os.path.basename(argv[0]) + print('usage: %s \n' + '(example: "%s development.ini")' % (cmd, cmd)) + sys.exit(1) + +def main(argv=sys.argv): + if len(argv) != 2: + usage(argv) + config_uri = argv[1] + setup_logging(config_uri) + settings = get_appsettings(config_uri) + engine = engine_from_config(settings, 'sqlalchemy.') + DBSession.configure(bind=engine) + Base.metadata.create_all(engine) + with transaction.manager: + model = MyModel(name='one', value=1) + DBSession.add(model) diff --git a/pyramid/scaffolds/alchemy/+package+/scripts/populate.py b/pyramid/scaffolds/alchemy/+package+/scripts/populate.py deleted file mode 100644 index 0e828465f..000000000 --- a/pyramid/scaffolds/alchemy/+package+/scripts/populate.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import sys -import transaction - -from sqlalchemy import engine_from_config - -from pyramid.paster import ( - get_appsettings, - setup_logging, - ) - -from ..models import ( - DBSession, - MyModel, - Base, - ) - -def usage(argv): - cmd = os.path.basename(argv[0]) - print('usage: %s \n' - '(example: "%s development.ini")' % (cmd, cmd)) - sys.exit(1) - -def main(argv=sys.argv): - if len(argv) != 2: - usage(argv) - config_uri = argv[1] - setup_logging(config_uri) - settings = get_appsettings(config_uri) - engine = engine_from_config(settings, 'sqlalchemy.') - DBSession.configure(bind=engine) - Base.metadata.create_all(engine) - with transaction.manager: - model = MyModel(name='one', value=1) - DBSession.add(model) diff --git a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl index b7b23fc67..9ecda9110 100644 --- a/pyramid/scaffolds/alchemy/+package+/views.py_tmpl +++ b/pyramid/scaffolds/alchemy/+package+/views.py_tmpl @@ -1,5 +1,8 @@ +from pyramid.response import Response from pyramid.view import view_config +from sqlalchemy.exc import DBAPIError + from .models import ( DBSession, MyModel, @@ -7,5 +10,25 @@ from .models import ( @view_config(route_name='home', renderer='templates/mytemplate.pt') def my_view(request): - one = DBSession.query(MyModel).filter(MyModel.name=='one').first() + try: + one = 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/setup.py_tmpl b/pyramid/scaffolds/alchemy/setup.py_tmpl index c091dca06..b80fc52a8 100644 --- a/pyramid/scaffolds/alchemy/setup.py_tmpl +++ b/pyramid/scaffolds/alchemy/setup.py_tmpl @@ -39,7 +39,7 @@ setup(name='{{project}}', [paste.app_factory] main = {{package}}:main [console_scripts] - populate_{{project}} = {{package}}.scripts.populate:main + initialize_{{project}}_db = {{package}}.scripts.initializedb:main """, ) -- cgit v1.2.3