summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/api/paster.rst2
-rw-r--r--pyramid/paster.py5
-rw-r--r--pyramid/scripts/pserve.py1
-rw-r--r--pyramid/tests/test_paster.py35
-rw-r--r--pyramid/tests/test_scripts/test_pserve.py24
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):