diff options
| -rw-r--r-- | docs/api/paster.rst | 2 | ||||
| -rw-r--r-- | pyramid/paster.py | 5 | ||||
| -rw-r--r-- | pyramid/scripts/pserve.py | 1 | ||||
| -rw-r--r-- | pyramid/tests/test_paster.py | 35 | ||||
| -rw-r--r-- | pyramid/tests/test_scripts/test_pserve.py | 24 |
5 files changed, 46 insertions, 21 deletions
diff --git a/docs/api/paster.rst b/docs/api/paster.rst index 3f7a1c364..bde128e05 100644 --- a/docs/api/paster.rst +++ b/docs/api/paster.rst @@ -7,7 +7,7 @@ .. autofunction:: bootstrap - .. autofunction:: get_app(config_uri, name=None) + .. autofunction:: get_app(config_uri, name=None, options=None) .. autofunction:: get_appsettings(config_uri, name=None) diff --git a/pyramid/paster.py b/pyramid/paster.py index 6dd7f9086..ce07d1fe0 100644 --- a/pyramid/paster.py +++ b/pyramid/paster.py @@ -13,8 +13,9 @@ def get_app(config_uri, name=None, options=None, loadapp=loadapp): """ Return the WSGI application named ``name`` in the PasteDeploy config file specified by ``config_uri``. - ``options`` are used as variable assignments like {'http_port': 8080} - and then use %(http_port)s in the config file. + ``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``. diff --git a/pyramid/scripts/pserve.py b/pyramid/scripts/pserve.py index 44ee54dcd..6c7e1d654 100644 --- a/pyramid/scripts/pserve.py +++ b/pyramid/scripts/pserve.py @@ -188,6 +188,7 @@ class PServeCommand(object): self.out('You must give a config file') return 2 app_spec = self.args[0] + if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] diff --git a/pyramid/tests/test_paster.py b/pyramid/tests/test_paster.py index 47643e972..b72e0e6b6 100644 --- a/pyramid/tests/test_paster.py +++ b/pyramid/tests/test_paster.py @@ -2,14 +2,16 @@ import os import unittest class Test_get_app(unittest.TestCase): - def _callFUT(self, config_file, section_name, loadapp): + def _callFUT(self, config_file, section_name, options=None, loadapp=None): from pyramid.paster import get_app - return get_app(config_file, section_name, loadapp=loadapp) + return get_app( + config_file, section_name, options=options, loadapp=loadapp + ) def test_it(self): app = DummyApp() loadapp = DummyLoadWSGI(app) - result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp) + result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp=loadapp) self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') self.assertEqual(loadapp.section_name, 'myapp') self.assertEqual(loadapp.relative_to, os.getcwd()) @@ -18,7 +20,9 @@ class Test_get_app(unittest.TestCase): def test_it_with_hash(self): app = DummyApp() loadapp = DummyLoadWSGI(app) - result = self._callFUT('/foo/bar/myapp.ini#myapp', None, loadapp) + result = self._callFUT( + '/foo/bar/myapp.ini#myapp', None, loadapp=loadapp + ) self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') self.assertEqual(loadapp.section_name, 'myapp') self.assertEqual(loadapp.relative_to, os.getcwd()) @@ -27,12 +31,30 @@ class Test_get_app(unittest.TestCase): def test_it_with_hash_and_name_override(self): app = DummyApp() loadapp = DummyLoadWSGI(app) - result = self._callFUT('/foo/bar/myapp.ini#myapp', 'yourapp', loadapp) + result = self._callFUT( + '/foo/bar/myapp.ini#myapp', 'yourapp', loadapp=loadapp + ) self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') self.assertEqual(loadapp.section_name, 'yourapp') self.assertEqual(loadapp.relative_to, os.getcwd()) self.assertEqual(result, app) + def test_it_with_options(self): + app = DummyApp() + loadapp = DummyLoadWSGI(app) + options = {'a':1} + result = self._callFUT( + '/foo/bar/myapp.ini#myapp', + 'yourapp', + loadapp=loadapp, + options=options, + ) + self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') + self.assertEqual(loadapp.section_name, 'yourapp') + self.assertEqual(loadapp.relative_to, os.getcwd()) + self.assertEqual(loadapp.kw, {'global_conf':options}) + self.assertEqual(result, app) + class Test_get_appsettings(unittest.TestCase): def _callFUT(self, config_file, section_name, appconfig): from pyramid.paster import get_appsettings @@ -132,10 +154,11 @@ class DummyLoadWSGI: def __init__(self, result): self.result = result - def __call__(self, config_name, name=None, relative_to=None): + def __call__(self, config_name, name=None, relative_to=None, **kw): self.config_name = config_name self.section_name = name self.relative_to = relative_to + self.kw = kw return self.result class DummyApp: diff --git a/pyramid/tests/test_scripts/test_pserve.py b/pyramid/tests/test_scripts/test_pserve.py index 18ba3a779..6e4b0f17d 100644 --- a/pyramid/tests/test_scripts/test_pserve.py +++ b/pyramid/tests/test_scripts/test_pserve.py @@ -199,6 +199,18 @@ class TestPServeCommand(unittest.TestCase): msg = 'PID in %s is not valid (deleting)' % fn self.assertEqual(self.out_.getvalue(), msg) + def test_get_options_with_command(self): + inst = self._makeOne() + inst.args = ['foo', 'stop', 'a=1', 'b=2'] + result = inst.get_options() + self.assertEqual(result, {'a': '1', 'b': '2'}) + + def test_get_options_no_command(self): + inst = self._makeOne() + inst.args = ['foo', 'a=1', 'b=2'] + result = inst.get_options() + self.assertEqual(result, {'a': '1', 'b': '2'}) + def test_parse_vars_good(self): from pyramid.tests.test_scripts.dummy import DummyApp @@ -217,20 +229,8 @@ class TestPServeCommand(unittest.TestCase): self.assertEqual(app.global_conf, {'a': '1', 'b': '2'}) def test_parse_vars_bad(self): - from pyramid.tests.test_scripts.dummy import DummyApp - inst = self._makeOne('development.ini', 'a') - inst.loadserver = self._get_server - - - app = DummyApp() - - def get_app(*args, **kwargs): - app.global_conf = kwargs.get('global_conf', None) - - inst.loadapp = get_app - self.assertRaises(ValueError, inst.run) class Test_read_pidfile(unittest.TestCase): |
