summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyramid/scripts/pshell.py31
-rw-r--r--pyramid/tests/test_scripts/test_pshell.py55
2 files changed, 25 insertions, 61 deletions
diff --git a/pyramid/scripts/pshell.py b/pyramid/scripts/pshell.py
index 83e640c32..bb201dbc2 100644
--- a/pyramid/scripts/pshell.py
+++ b/pyramid/scripts/pshell.py
@@ -5,15 +5,14 @@ import sys
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 @@ class PShellCommand(object):
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 @@ class PShellCommand(object):
"passed here.",
)
- ConfigParser = configparser.ConfigParser # testing
default_runner = python_shell_runner # testing
loaded_objects = {}
@@ -91,20 +90,13 @@ class PShellCommand(object):
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 @@ class PShellCommand(object):
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')
diff --git a/pyramid/tests/test_scripts/test_pshell.py b/pyramid/tests/test_scripts/test_pshell.py
index 303964b2b..ca9eb7af2 100644
--- a/pyramid/tests/test_scripts/test_pshell.py
+++ b/pyramid/tests/test_scripts/test_pshell.py
@@ -8,16 +8,16 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
'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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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 @@ class TestPShellCommand(unittest.TestCase):
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_,