(self)
Main command to create a new shell
Main command to create a new shell
Main command to create a new shell
def command(self):
        """Main command to create a new shell"""
        self.verbose = 3
        if len(self.args) == 0:
            # Assume the .ini file is ./development.ini
            config_file = 'development.ini'
            if not os.path.isfile(config_file):
                raise BadCommand('%sError: CONFIG_FILE not found at: .%s%s\n'
                                 'Please specify a CONFIG_FILE' % \
                                 (self.parser.get_usage(), os.path.sep,
                                  config_file))
        else:
            config_file = self.args[0]

        config_name = 'config:%s' % config_file
        here_dir = os.getcwd()
        locs = dict(__name__="pylons-admin")

        if not self.options.quiet:
            # Configure logging from the config file
            self.logging_file_config(config_file)

        # Load locals and populate with objects for use in shell
        sys.path.insert(0, here_dir)

        # Load the wsgi app first so that everything is initialized right
        wsgiapp = loadapp(config_name, relative_to=here_dir)
        test_app = paste.fixture.TestApp(wsgiapp)

        # Query the test app to setup the environment
        tresponse = test_app.get('/_test_vars')
        request_id = int(tresponse.body)

        # Disable restoration during test_app requests
        test_app.pre_request_hook = lambda self: \
            paste.registry.restorer.restoration_end()
        test_app.post_request_hook = lambda self: \
            paste.registry.restorer.restoration_begin(request_id)

        # Restore the state of the Pylons special objects
        # (StackedObjectProxies)
        paste.registry.restorer.restoration_begin(request_id)

        # Determine the package name from the pylons.config object
        pkg_name = pylons.config['pylons.package']

        # Start the rest of our imports now that the app is loaded
        if is_minimal_template(pkg_name, True):
            model_module = None
            helpers_module = pkg_name + '.helpers'
            base_module = pkg_name + '.controllers'
        else:
            model_module = pkg_name + '.model'
            helpers_module = pkg_name + '.lib.helpers'
            base_module = pkg_name + '.lib.base'

        if model_module and can_import(model_module):
            locs['model'] = sys.modules[model_module]

        if can_import(helpers_module):
            locs['h'] = sys.modules[helpers_module]

        exec ('from pylons import app_globals, config, request, response, '
              'session, tmpl_context, url') in locs
        exec ('from pylons.controllers.util import abort, redirect') in locs
        exec 'from pylons.i18n import _, ungettext, N_' in locs
        locs.pop('__builtins__', None)

        # Import all objects from the base module
        __import__(base_module)

        base = sys.modules[base_module]
        base_public = [__name for __name in dir(base) if not \
                       __name.startswith('_') or __name == '_']
        locs.update((name, getattr(base, name)) for name in base_public)
        locs.update(dict(wsgiapp=wsgiapp, app=test_app))

        mapper = tresponse.config.get('routes.map')
        if mapper:
            locs['mapper'] = mapper

        banner = "  All objects from %s are available\n" % base_module
        banner += "  Additional Objects:\n"
        if mapper:
            banner += "  %-10s -  %s\n" % ('mapper', 'Routes mapper object')
        banner += "  %-10s -  %s\n" % ('wsgiapp',
            "This project's WSGI App instance")
        banner += "  %-10s -  %s\n" % ('app',
            'paste.fixture wrapped around wsgiapp')

        try:
            if self.options.disable_ipython:
                raise ImportError()

            # try to use IPython if possible
            try:
                try:
                    # 1.0 <= ipython
                    from IPython.terminal.embed import InteractiveShellEmbed
                except ImportError:
                    # 0.11 <= ipython < 1.0
                    from IPython.frontend.terminal.embed import InteractiveShellEmbed
                shell = InteractiveShellEmbed(banner2=banner)
            except ImportError:
                # ipython < 0.11
                from IPython.Shell import IPShellEmbed
                shell = IPShellEmbed(argv=self.args)
                shell.set_banner(shell.IP.BANNER + '\n\n' + banner)

            try:
                shell(local_ns=locs, global_ns={})
            finally:
                paste.registry.restorer.restoration_end()
        except ImportError:
            import code
            py_prefix = sys.platform.startswith('java') and 'J' or 'P'
            newbanner = "Pylons Interactive Shell\n%sython %s\n\n" % \
                (py_prefix, sys.version)
            banner = newbanner + banner
            shell = code.InteractiveConsole(locals=locs)
            try:
                import readline
            except ImportError:
                pass
            try:
                shell.interact(banner)
            finally:
                paste.registry.restorer.restoration_end()
def command ( self ) : self . verbose = 3 if len ( self . args ) == 0 : # Assume the .ini file is ./development.ini config_file = 'development.ini' if not os . path . isfile ( config_file ) : raise BadCommand ( '%sError: CONFIG_FILE not found at: .%s%s\n' 'Please specify a CONFIG_FILE' % ( self . parser . get_usage ( ) , os . path . sep , config_file ) ) else : config_file = self . args [ 0 ] config_name = 'config:%s' % config_file here_dir = os . getcwd ( ) locs = dict ( __name__ = "pylons-admin" ) if not self . options . quiet : # Configure logging from the config file self . logging_file_config ( config_file ) # Load locals and populate with objects for use in shell sys . path . insert ( 0 , here_dir ) # Load the wsgi app first so that everything is initialized right wsgiapp = loadapp ( config_name , relative_to = here_dir ) test_app = paste . fixture . TestApp ( wsgiapp ) # Query the test app to setup the environment tresponse = test_app . get ( '/_test_vars' ) request_id = int ( tresponse . body ) # Disable restoration during test_app requests test_app . pre_request_hook = lambda self : paste . registry . restorer . restoration_end ( ) test_app . post_request_hook = lambda self : paste . registry . restorer . restoration_begin ( request_id ) # Restore the state of the Pylons special objects # (StackedObjectProxies) paste . registry . restorer . restoration_begin ( request_id ) # Determine the package name from the pylons.config object pkg_name = pylons . config [ 'pylons.package' ] # Start the rest of our imports now that the app is loaded if is_minimal_template ( pkg_name , True ) : model_module = None helpers_module = pkg_name + '.helpers' base_module = pkg_name + '.controllers' else : model_module = pkg_name + '.model' helpers_module = pkg_name + '.lib.helpers' base_module = pkg_name + '.lib.base' if model_module and can_import ( model_module ) : locs [ 'model' ] = sys . modules [ model_module ] if can_import ( helpers_module ) : locs [ 'h' ] = sys . modules [ helpers_module ] exec ( 'from pylons import app_globals, config, request, response, ' 'session, tmpl_context, url' ) in locs exec ( 'from pylons.controllers.util import abort, redirect' ) in locs exec 'from pylons.i18n import _, ungettext, N_' in locs locs . pop ( '__builtins__' , None ) # Import all objects from the base module __import__ ( base_module ) base = sys . modules [ base_module ] base_public = [ __name for __name in dir ( base ) if not __name . startswith ( '_' ) or __name == '_' ] locs . update ( ( name , getattr ( base , name ) ) for name in base_public ) locs . update ( dict ( wsgiapp = wsgiapp , app = test_app ) ) mapper = tresponse . config . get ( 'routes.map' ) if mapper : locs [ 'mapper' ] = mapper banner = "  All objects from %s are available\n" % base_module banner += "  Additional Objects:\n" if mapper : banner += "  %-10s -  %s\n" % ( 'mapper' , 'Routes mapper object' ) banner += "  %-10s -  %s\n" % ( 'wsgiapp' , "This project's WSGI App instance" ) banner += "  %-10s -  %s\n" % ( 'app' , 'paste.fixture wrapped around wsgiapp' ) try : if self . options . disable_ipython : raise ImportError ( ) # try to use IPython if possible try : try : # 1.0 <= ipython from IPython . terminal . embed import InteractiveShellEmbed except ImportError : # 0.11 <= ipython < 1.0 from IPython . frontend . terminal . embed import InteractiveShellEmbed shell = InteractiveShellEmbed ( banner2 = banner ) except ImportError : # ipython < 0.11 from IPython . Shell import IPShellEmbed shell = IPShellEmbed ( argv = self . args ) shell . set_banner ( shell . IP . BANNER + '\n\n' + banner ) try : shell ( local_ns = locs , global_ns = { } ) finally : paste . registry . restorer . restoration_end ( ) except ImportError : import code py_prefix = sys . platform . startswith ( 'java' ) and 'J' or 'P' newbanner = "Pylons Interactive Shell\n%sython %s\n\n" % ( py_prefix , sys . version ) banner = newbanner + banner shell = code . InteractiveConsole ( locals = locs ) try : import readline except ImportError : pass try : shell . interact ( banner ) finally : paste . registry . restorer . restoration_end ( )