Michael Merickel
2017-03-06 fcb470ca291458844083f27a6c432c0267b28157
Merge pull request #2974 from mmerickel/backport-2962-to-1.8-branch

Make sure PServeCommand kwargs are passed to the hupper worker.
4 files modified
45 ■■■■■ changed files
CHANGES.txt 5 ●●●●● patch | view | raw | blame | history
pyramid/scripts/pserve.py 3 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_scripts/test_pserve.py 35 ●●●●● patch | view | raw | blame | history
setup.py 2 ●●● patch | view | raw | blame | history
CHANGES.txt
@@ -12,6 +12,11 @@
  object in which the registry was stored in a closure preventing it from
  being deallocated. See https://github.com/Pylons/pyramid/pull/2973
- Fix a bug directly invoking ``pyramid.scripts.pserve.main`` with the
  ``--reload`` option in which ``sys.argv`` is always used in the subprocess
  instead of the supplied ``argv``.
  See https://github.com/Pylons/pyramid/pull/2974
Documentation Changes
---------------------
pyramid/scripts/pserve.py
@@ -124,6 +124,8 @@
        self.args = self.parser.parse_args(argv[1:])
        if quiet:
            self.args.verbose = 0
        if self.args.reload:
            self.worker_kwargs = {'argv': argv, "quiet": quiet}
        self.watch_files = []
    def out(self, msg): # pragma: no cover
@@ -203,6 +205,7 @@
                'pyramid.scripts.pserve.main',
                reload_interval=int(self.args.reload_interval),
                verbose=self.args.verbose,
                worker_kwargs=self.worker_kwargs
            )
            return 0
pyramid/tests/test_scripts/test_pserve.py
@@ -2,7 +2,9 @@
import unittest
from pyramid.tests.test_scripts import dummy
here = os.path.abspath(os.path.dirname(__file__))
class TestPServeCommand(unittest.TestCase):
    def setUp(self):
@@ -48,10 +50,11 @@
        inst.loadserver = self._get_server
        app = dummy.DummyApp()
        def get_app(*args, **kwargs):
            app.global_conf = kwargs.get('global_conf', None)
        inst.loadapp = get_app
        inst.loadapp = get_app
        inst.run()
        self.assertEqual(app.global_conf, {'a': '1', 'b': '2'})
@@ -77,6 +80,36 @@
            os.path.abspath(os.path.join(here, '*.py')),
        ])
    def test_reload_call_hupper_with_correct_args(self):
        from pyramid.scripts import pserve
        class AttrDict(dict):
            def __init__(self, *args, **kwargs):
                super(AttrDict, self).__init__(*args, **kwargs)
                self.__dict__ = self
        def dummy_start_reloader(*args, **kwargs):
            dummy_start_reloader.args = args
            dummy_start_reloader.kwargs = kwargs
        orig_hupper = pserve.hupper
        try:
            pserve.hupper = AttrDict(is_active=lambda: False,
                                     start_reloader=dummy_start_reloader)
            inst = self._makeOne('--reload', 'development.ini')
            inst.run()
        finally:
            pserve.hupper = orig_hupper
        self.assertEquals(dummy_start_reloader.args, ('pyramid.scripts.pserve.main',))
        self.assertEquals(dummy_start_reloader.kwargs, {
            'reload_interval': 1,
            'verbose': 1,
            'worker_kwargs': {'argv': ['pserve', '--reload', 'development.ini'],
                              'quiet': False}})
class Test_main(unittest.TestCase):
    def _callFUT(self, argv):
        from pyramid.scripts.pserve import main
setup.py
@@ -67,7 +67,7 @@
testing_extras = tests_require + [
    'nose',
    'coverage',
    'virtualenv', # for scaffolding tests
    'virtualenv',  # for scaffolding tests
    ]
setup(name='pyramid',