Michael Merickel
2017-03-29 e1d1af88e314fe59d9197182f8c2b56ecdcbd115
update pshell
2 files modified
86 ■■■■ changed files
pyramid/scripts/pshell.py 31 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_scripts/test_pshell.py 55 ●●●● patch | view | raw | blame | history
pyramid/scripts/pshell.py
@@ -5,15 +5,14 @@
import textwrap
import pkg_resources
from pyramid.compat import configparser
from pyramid.compat import exec_
from pyramid.util import DottedNameResolver
from pyramid.paster import bootstrap
from pyramid.settings import aslist
from pyramid.scripts.common import get_config_loader
from pyramid.scripts.common import parse_vars
from pyramid.scripts.common import setup_logging
def main(argv=sys.argv, quiet=False):
    command = PShellCommand(argv, quiet)
@@ -41,7 +40,8 @@
    than one Pyramid application within it, the loader will use the
    last one.
    """
    bootstrap = (bootstrap,)  # for testing
    bootstrap = staticmethod(bootstrap)  # for testing
    get_config_loader = staticmethod(get_config_loader)  # for testing
    pkg_resources = pkg_resources  # for testing
    parser = argparse.ArgumentParser(
@@ -78,7 +78,6 @@
             "passed here.",
        )
    ConfigParser = configparser.ConfigParser # testing
    default_runner = python_shell_runner # testing
    loaded_objects = {}
@@ -91,20 +90,13 @@
        self.quiet = quiet
        self.args = self.parser.parse_args(argv[1:])
    def pshell_file_config(self, filename):
        config = self.ConfigParser()
        config.optionxform = str
        config.read(filename)
        try:
            items = config.items('pshell')
        except configparser.NoSectionError:
            return
    def pshell_file_config(self, loader, defaults):
        settings = loader.get_settings('pshell', defaults)
        resolver = DottedNameResolver(None)
        self.loaded_objects = {}
        self.object_help = {}
        self.setup = None
        for k, v in items:
        for k, v in settings.items():
            if k == 'setup':
                self.setup = v
            elif k == 'default_shell':
@@ -124,13 +116,12 @@
            self.out('Requires a config file argument')
            return 2
        config_uri = self.args.config_uri
        config_file = config_uri.split('#', 1)[0]
        setup_logging(config_file)
        self.pshell_file_config(config_file)
        config_vars = parse_vars(self.args.config_vars)
        loader = self.get_config_loader(config_uri)
        loader.setup_logging(config_vars)
        self.pshell_file_config(loader, config_vars)
        # bootstrap the environ
        env = self.bootstrap[0](config_uri,
                                options=parse_vars(self.args.config_vars))
        env = self.bootstrap(config_uri, options=config_vars)
        # remove the closer from the env
        self.closer = env.pop('closer')
pyramid/tests/test_scripts/test_pshell.py
@@ -8,16 +8,16 @@
        from pyramid.scripts.pshell import PShellCommand
        return PShellCommand
    def _makeOne(self, patch_bootstrap=True, patch_config=True,
    def _makeOne(self, patch_bootstrap=True, patch_loader=True,
                 patch_args=True, patch_options=True):
        cmd = self._getTargetClass()([])
        if patch_bootstrap:
            self.bootstrap = dummy.DummyBootstrap()
            cmd.bootstrap = (self.bootstrap,)
        if patch_config:
            self.config_factory = dummy.DummyConfigParserFactory()
            cmd.ConfigParser = self.config_factory
            cmd.bootstrap = self.bootstrap
        if patch_loader:
            self.loader = dummy.DummyLoader()
            cmd.get_config_loader = self.loader
        if patch_args:
            class Args(object): pass
            self.args = Args()
@@ -46,9 +46,6 @@
        command.default_runner = shell
        command.run()
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':self.bootstrap.root,
@@ -79,9 +76,6 @@
        self.assertEqual(
            out_calls, ['could not find a shell named "unknown_python_shell"']
        )
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertTrue(self.bootstrap.closer.called)
@@ -100,9 +94,6 @@
        command.args.python_shell = 'ipython'
        command.run()
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':self.bootstrap.root,
@@ -199,12 +190,9 @@
        command = self._makeOne()
        model = dummy.Dummy()
        user = dummy.Dummy()
        self.config_factory.items = [('m', model), ('User', user)]
        self.loader.settings = {'pshell': {'m': model, 'User': user}}
        shell = dummy.DummyShell()
        command.run(shell)
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':self.bootstrap.root,
@@ -223,12 +211,9 @@
            env['a'] = 1
            env['root'] = 'root override'
            env['none'] = None
        self.config_factory.items = [('setup', setup)]
        self.loader.settings = {'pshell': {'setup': setup}}
        shell = dummy.DummyShell()
        command.run(shell)
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':'root override',
@@ -252,12 +237,9 @@
                'python': dshell,
            }
        )
        self.config_factory.items = [
            ('default_shell', 'bpython python\nipython')]
        self.loader.settings = {'pshell': {
            'default_shell': 'bpython python\nipython'}}
        command.run()
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertTrue(dshell.called)
@@ -268,12 +250,9 @@
            env['a'] = 1
            env['m'] = 'model override'
            env['root'] = 'root override'
        self.config_factory.items = [('setup', setup), ('m', model)]
        self.loader.settings = {'pshell': {'setup': setup, 'm': model}}
        shell = dummy.DummyShell()
        command.run(shell)
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':'root override',
@@ -291,14 +270,10 @@
            env['a'] = 1
            env['root'] = 'root override'
        model = dummy.Dummy()
        self.config_factory.items = [('setup', 'abc'),
                                     ('m', model)]
        self.loader.settings = {'pshell': {'setup': 'abc', 'm': model}}
        command.args.setup = setup
        shell = dummy.DummyShell()
        command.run(shell)
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':self.bootstrap.app, 'root':'root override',
@@ -313,13 +288,11 @@
    def test_command_custom_section_override(self):
        command = self._makeOne()
        dummy_ = dummy.Dummy()
        self.config_factory.items = [('app', dummy_), ('root', dummy_),
                                     ('registry', dummy_), ('request', dummy_)]
        self.loader.settings = {'pshell': {
            'app': dummy_, 'root': dummy_, 'registry': dummy_,
            'request': dummy_}}
        shell = dummy.DummyShell()
        command.run(shell)
        self.assertTrue(self.config_factory.parser)
        self.assertEqual(self.config_factory.parser.filename,
                         '/foo/bar/myapp.ini')
        self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
        self.assertEqual(shell.env, {
            'app':dummy_, 'root':dummy_, 'registry':dummy_, 'request':dummy_,