summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2013-03-20 22:53:35 -0500
committerMichael Merickel <michael@merickel.org>2013-03-20 22:53:35 -0500
commit6f065c08410cc892e93f276ec711d82b92ba6020 (patch)
treef2e30a3997a00ac8baa2613e44374ac3aa8337f5
parent8345ae7d0f20b7c924d45b4c6afedf437d3e68b6 (diff)
parent924888ed7c8a953d427517bbd6bc3ae4dcd2e27b (diff)
downloadpyramid-6f065c08410cc892e93f276ec711d82b92ba6020.tar.gz
pyramid-6f065c08410cc892e93f276ec711d82b92ba6020.tar.bz2
pyramid-6f065c08410cc892e93f276ec711d82b92ba6020.zip
Merge branch 'pull.911'
-rw-r--r--docs/api/paster.rst2
-rw-r--r--pyramid/paster.py22
-rw-r--r--pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py9
-rw-r--r--pyramid/tests/fixtures/dummy.ini4
-rw-r--r--pyramid/tests/test_paster.py44
5 files changed, 58 insertions, 23 deletions
diff --git a/docs/api/paster.rst b/docs/api/paster.rst
index bde128e05..edc3738fc 100644
--- a/docs/api/paster.rst
+++ b/docs/api/paster.rst
@@ -9,6 +9,6 @@
.. autofunction:: get_app(config_uri, name=None, options=None)
- .. autofunction:: get_appsettings(config_uri, name=None)
+ .. autofunction:: get_appsettings(config_uri, name=None, options=None)
.. autofunction:: setup_logging(config_uri)
diff --git a/pyramid/paster.py b/pyramid/paster.py
index ce07d1fe0..967543849 100644
--- a/pyramid/paster.py
+++ b/pyramid/paster.py
@@ -23,26 +23,34 @@ def get_app(config_uri, name=None, options=None, loadapp=loadapp):
path, section = _getpathsec(config_uri, name)
config_name = 'config:%s' % path
here_dir = os.getcwd()
- if options:
- kw = {'global_conf': options}
- else:
- kw = {}
- app = loadapp(config_name, name=section, relative_to=here_dir, **kw)
+ app = loadapp(
+ config_name,
+ name=section,
+ relative_to=here_dir,
+ global_conf=options)
return app
-def get_appsettings(config_uri, name=None, appconfig=appconfig):
+def get_appsettings(config_uri, name=None, options=None, appconfig=appconfig):
""" Return a dictionary representing the key/value pairs in an ``app``
section within the file represented by ``config_uri``.
+ ``options``, if passed, should be a dictionary used as variable assignments
+ like ``{'http_port': 8080}``. This is useful if e.g. ``%(http_port)s`` is
+ used in the config file.
+
If the ``name`` is None, this will attempt to parse the name from
the ``config_uri`` string expecting the format ``inifile#name``.
If no name is found, the name will default to "main"."""
path, section = _getpathsec(config_uri, name)
config_name = 'config:%s' % path
here_dir = os.getcwd()
- return appconfig(config_name, name=section, relative_to=here_dir)
+ return appconfig(
+ config_name,
+ name=section,
+ relative_to=here_dir,
+ global_conf=options)
def setup_logging(config_uri, fileConfig=fileConfig,
configparser=configparser):
diff --git a/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py
index 66feb3008..7dfdece15 100644
--- a/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py
+++ b/pyramid/scaffolds/alchemy/+package+/scripts/initializedb.py
@@ -9,6 +9,8 @@ from pyramid.paster import (
setup_logging,
)
+from pyramid.scripts.common import parse_vars
+
from ..models import (
DBSession,
MyModel,
@@ -18,17 +20,18 @@ from ..models import (
def usage(argv):
cmd = os.path.basename(argv[0])
- print('usage: %s <config_uri>\n'
+ print('usage: %s <config_uri> [var=value]\n'
'(example: "%s development.ini")' % (cmd, cmd))
sys.exit(1)
def main(argv=sys.argv):
- if len(argv) != 2:
+ if len(argv) < 2:
usage(argv)
config_uri = argv[1]
+ options = parse_vars(argv[2:])
setup_logging(config_uri)
- settings = get_appsettings(config_uri)
+ settings = get_appsettings(config_uri, options=options)
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
Base.metadata.create_all(engine)
diff --git a/pyramid/tests/fixtures/dummy.ini b/pyramid/tests/fixtures/dummy.ini
new file mode 100644
index 000000000..bc2281168
--- /dev/null
+++ b/pyramid/tests/fixtures/dummy.ini
@@ -0,0 +1,4 @@
+[app:myapp]
+use = call:pyramid.tests.test_paster:make_dummyapp
+
+foo = %(bar)s
diff --git a/pyramid/tests/test_paster.py b/pyramid/tests/test_paster.py
index b72e0e6b6..5e341172c 100644
--- a/pyramid/tests/test_paster.py
+++ b/pyramid/tests/test_paster.py
@@ -1,12 +1,12 @@
import os
import unittest
+here = os.path.dirname(__file__)
+
class Test_get_app(unittest.TestCase):
- def _callFUT(self, config_file, section_name, options=None, loadapp=None):
+ def _callFUT(self, config_file, section_name, **kw):
from pyramid.paster import get_app
- return get_app(
- config_file, section_name, options=options, loadapp=loadapp
- )
+ return get_app(config_file, section_name, **kw)
def test_it(self):
app = DummyApp()
@@ -55,15 +55,23 @@ class Test_get_app(unittest.TestCase):
self.assertEqual(loadapp.kw, {'global_conf':options})
self.assertEqual(result, app)
+ def test_it_with_dummyapp_requiring_options(self):
+ options = {'bar': 'baz'}
+ app = self._callFUT(
+ os.path.join(here, 'fixtures', 'dummy.ini'),
+ 'myapp', options=options)
+ self.assertEqual(app.settings['foo'], 'baz')
+
class Test_get_appsettings(unittest.TestCase):
- def _callFUT(self, config_file, section_name, appconfig):
+ def _callFUT(self, config_file, section_name, **kw):
from pyramid.paster import get_appsettings
- return get_appsettings(config_file, section_name, appconfig)
+ return get_appsettings(config_file, section_name, **kw)
def test_it(self):
values = {'a':1}
appconfig = DummyLoadWSGI(values)
- result = self._callFUT('/foo/bar/myapp.ini', 'myapp', appconfig)
+ result = self._callFUT('/foo/bar/myapp.ini', 'myapp',
+ appconfig=appconfig)
self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')
self.assertEqual(appconfig.section_name, 'myapp')
self.assertEqual(appconfig.relative_to, os.getcwd())
@@ -72,7 +80,8 @@ class Test_get_appsettings(unittest.TestCase):
def test_it_with_hash(self):
values = {'a':1}
appconfig = DummyLoadWSGI(values)
- result = self._callFUT('/foo/bar/myapp.ini#myapp', None, appconfig)
+ result = self._callFUT('/foo/bar/myapp.ini#myapp', None,
+ appconfig=appconfig)
self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')
self.assertEqual(appconfig.section_name, 'myapp')
self.assertEqual(appconfig.relative_to, os.getcwd())
@@ -81,12 +90,20 @@ class Test_get_appsettings(unittest.TestCase):
def test_it_with_hash_and_name_override(self):
values = {'a':1}
appconfig = DummyLoadWSGI(values)
- result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp', appconfig)
+ result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp',
+ appconfig=appconfig)
self.assertEqual(appconfig.config_name, 'config:/foo/bar/myapp.ini')
self.assertEqual(appconfig.section_name, 'yourapp')
self.assertEqual(appconfig.relative_to, os.getcwd())
self.assertEqual(result, values)
+ def test_it_with_dummyapp_requiring_options(self):
+ options = {'bar': 'baz'}
+ result = self._callFUT(
+ os.path.join(here, 'fixtures', 'dummy.ini'),
+ 'myapp', options=options)
+ self.assertEqual(result['foo'], 'baz')
+
class Test_setup_logging(unittest.TestCase):
def _callFUT(self, config_file):
from pyramid.paster import setup_logging
@@ -165,6 +182,12 @@ class DummyApp:
def __init__(self):
self.registry = dummy_registry
+def make_dummyapp(global_conf, **settings):
+ app = DummyApp()
+ app.settings = settings
+ app.global_conf = global_conf
+ return app
+
class DummyRequest:
application_url = 'http://example.com:5432'
script_name = ''
@@ -181,6 +204,3 @@ class DummyConfigParser(object):
class DummyConfigParserModule(object):
ConfigParser = DummyConfigParser
-
-
-