Michael Merickel
2011-07-06 e6d8e5394aeb1111d955bc21712c93bcb26ffcc0
Added tests for the new pshell.
2 files modified
182 ■■■■ changed files
pyramid/paster.py 17 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_paster.py 165 ●●●● patch | view | raw | blame | history
pyramid/paster.py
@@ -1,8 +1,8 @@
import ConfigParser
import os
import re
import sys
from code import interact
from ConfigParser import ConfigParser
import zope.deprecation
@@ -23,7 +23,7 @@
    config file ``config_file``.
    If the ``name`` is None, this will attempt to parse the name from
    the ``config_file`` string expecting the format ``ini_path#name``.
    the ``config_file`` string expecting the format ``ini_file#name``.
    If no name is found, the name will default to "main"."""
    if '#' in config_file:
        path, section = config_file.split('#', 1)
@@ -82,15 +82,19 @@
                      dest='disable_ipython',
                      help="Don't use IPython even if it is available")
    ConfigParser = ConfigParser # testing
    ConfigParser = ConfigParser.ConfigParser # testing
    def pshell_file_config(self, filename):
        resolver = DottedNameResolver(None)
        self.loaded_objects = {}
        self.object_help = {}
        config = ConfigParser()
        config = self.ConfigParser()
        config.read(filename)
        for k, v in config.items('pshell'):
        try:
            items = config.items('pshell')
        except ConfigParser.NoSectionError:
            return
        for k, v in items:
            self.loaded_objects[k] = resolver.maybe_resolve(v)
            self.object_help[k] = v
@@ -115,7 +119,8 @@
        default_variables = {'app': 'The WSGI Application'}
        if hasattr(app, 'registry'):
            root, closer = self.get_root(app)
            shell_globals.update({'root':root, 'registry':app.registry})
            shell_globals.update({'root':root, 'registry':app.registry,
                                  'settings': app.registry.settings})
            default_variables.update({
                'root': 'The root of the default resource tree.',
                'registry': 'The Pyramid registry object.',
pyramid/tests/test_paster.py
@@ -15,7 +15,8 @@
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.ConfigParser = makeDummyConfigParser({})
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
@@ -27,8 +28,10 @@
        pushed = app.threadlocal_manager.pushed[0]
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(interact.local, {'root':dummy_root,
                                          'registry':dummy_registry})
        self.assertEqual(interact.local, {'app':app,
                                          'root':dummy_root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings})
        self.assertTrue(interact.banner)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
@@ -39,7 +42,8 @@
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.ConfigParser = makeDummyConfigParser({})
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = True
@@ -51,8 +55,10 @@
        pushed = app.threadlocal_manager.pushed[0]
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(interact.local, {'root':dummy_root,
                                          'registry':dummy_registry})
        self.assertEqual(interact.local, {'app':app,
                                          'root':dummy_root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings})
        self.assertTrue(interact.banner)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
@@ -61,8 +67,9 @@
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.ConfigParser = makeDummyConfigParser({})
        dummy_shell_factory = DummyIPShellFactory()
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
@@ -75,7 +82,9 @@
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(dummy_shell_factory.shell.local_ns,
                         {'root':dummy_root, 'registry':dummy_registry})
                         {'app':app, 'root':dummy_root,
                          'registry':dummy_registry,
                          'settings':dummy_registry.settings})
        self.assertEqual(dummy_shell_factory.shell.global_ns, {})
        self.assertTrue('\n\n' in dummy_shell_factory.shell.IP.BANNER)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
@@ -92,7 +101,8 @@
        interact = DummyInteractor()
        app = DummyApp()
        command.interact = (interact,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.ConfigParser = makeDummyConfigParser({})
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython =True
@@ -101,11 +111,13 @@
        pushed = app.threadlocal_manager.pushed[0]
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(interact.local, {'root':dummy_root,
                                          'registry':dummy_registry})
        self.assertEqual(interact.local, {'app': app,
                                          'root':dummy_root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings})
        self.assertTrue(interact.banner)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
        self.assertEqual(apped, [(('/foo/bar/myapp.ini', 'myapp'),
        self.assertEqual(apped, [(('/foo/bar/myapp.ini#myapp',),
                                  {'loadapp': loadapp})])
    def test_command_get_root_hookable(self):
@@ -115,13 +127,14 @@
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        command.ConfigParser = makeDummyConfigParser({})
        root = Dummy()
        apps = []
        def get_root(app):
            apps.append(app)
            return root, lambda *arg: None
        command.get_root =get_root
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython =True
@@ -130,10 +143,107 @@
        self.assertEqual(loadapp.section_name, 'myapp')
        self.assertTrue(loadapp.relative_to)
        self.assertEqual(len(app.threadlocal_manager.pushed), 0)
        self.assertEqual(interact.local, {'root':root,
                                          'registry':dummy_registry})
        self.assertEqual(interact.local, {'app':app,
                                          'root':root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings})
        self.assertTrue(interact.banner)
        self.assertEqual(apps, [app])
    def test_command_loads_custom_items(self):
        command = self._makeOne()
        interact = DummyInteractor()
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        model = Dummy()
        command.ConfigParser = makeDummyConfigParser([('m', model)])
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
        command.command(IPShell=None)
        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
        self.assertEqual(loadapp.section_name, 'myapp')
        self.assertTrue(loadapp.relative_to)
        self.assertEqual(len(app.threadlocal_manager.pushed), 1)
        pushed = app.threadlocal_manager.pushed[0]
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(interact.local, {'app':app,
                                          'root':dummy_root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings,
                                          'm': model})
        self.assertTrue(interact.banner)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
    def test_command_no_custom_section(self):
        command = self._makeOne()
        interact = DummyInteractor()
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        command.ConfigParser = makeDummyConfigParser(None)
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
        command.command(IPShell=None)
        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
        self.assertEqual(loadapp.section_name, 'myapp')
        self.assertTrue(loadapp.relative_to)
        self.assertEqual(len(app.threadlocal_manager.pushed), 1)
        pushed = app.threadlocal_manager.pushed[0]
        self.assertEqual(pushed['registry'], dummy_registry)
        self.assertEqual(pushed['request'].registry, dummy_registry)
        self.assertEqual(interact.local, {'app':app,
                                          'root':dummy_root,
                                          'registry':dummy_registry,
                                          'settings':dummy_registry.settings})
        self.assertTrue(interact.banner)
        self.assertEqual(len(app.threadlocal_manager.popped), 1)
    def test_command_custom_section_override(self):
        command = self._makeOne()
        interact = DummyInteractor()
        app = Dummy()
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        model = Dummy()
        command.ConfigParser = makeDummyConfigParser([('app', model)])
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
        command.command(IPShell=None)
        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
        self.assertEqual(loadapp.section_name, 'myapp')
        self.assertTrue(loadapp.relative_to)
        self.assertEqual(interact.local, {'app':model})
        self.assertTrue(interact.banner)
    def test_command_generic_wsgi_app(self):
        command = self._makeOne()
        interact = DummyInteractor()
        app = Dummy()
        loadapp = DummyLoadApp(app)
        command.interact = (interact,)
        command.loadapp = (loadapp,)
        command.ConfigParser = makeDummyConfigParser(None)
        command.args = ('/foo/bar/myapp.ini#myapp',)
        class Options(object): pass
        command.options = Options()
        command.options.disable_ipython = False
        command.command(IPShell=None)
        self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
        self.assertEqual(loadapp.section_name, 'myapp')
        self.assertTrue(loadapp.relative_to)
        self.assertEqual(interact.local, {'app':app})
        self.assertTrue(interact.banner)
class TestPRoutesCommand(unittest.TestCase):
    def _getTargetClass(self):
@@ -152,7 +262,7 @@
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(L, [])
@@ -165,7 +275,7 @@
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(L, [])
@@ -180,7 +290,7 @@
        app = DummyApp()
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(len(L), 3)
@@ -205,7 +315,7 @@
        app.registry = registry
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(len(L), 3)
@@ -235,7 +345,7 @@
        app.registry = registry
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(len(L), 3)
@@ -268,7 +378,7 @@
        app.registry = registry
        loadapp = DummyLoadApp(app)
        command.loadapp = (loadapp,)
        command.args = ('/foo/bar/myapp.ini#myapp')
        command.args = ('/foo/bar/myapp.ini#myapp',)
        result = command.command()
        self.assertEqual(result, None)
        self.assertEqual(len(L), 3)
@@ -844,6 +954,7 @@
dummy_root = Dummy()
class DummyRegistry(object):
    settings = {}
    def queryUtility(self, iface, default=None, name=''):
        return default
@@ -925,3 +1036,15 @@
        self.views = [(None, view, None) for view in views]
        self.__request_attrs__ = attrs
def makeDummyConfigParser(items):
    class DummyConfigParser(object):
        def read(self, filename):
            self.filename = filename
        def items(self, section):
            self.section = section
            if items is None:
                from ConfigParser import NoSectionError
                raise NoSectionError, section
            return items
    return DummyConfigParser