Пример #1
0
def noshell(args=None):
    # This is a customized entry point for launching Zope without forking shell
    # scripts or other processes.
    options = zopectl.ZopeCtlOptions()
    # Realize arguments and set documentation which is used in the -h option
    options.realize(args, doc=__doc__)

    # Change the program to avoid warning messages
    script = os.path.join(
        options.configroot.softwarehome, 'Zope2', 'Startup', 'run.py')
    options.program =  [options.python, script, '-C', options.configfile]

    # We use our own ZopeCmd set, that is derived from the original one.
    c = NoShellZopeCmd(options)
    # We need to apply a number of hacks to make things work:

    # We need to apply a number of hacks to make things work:

    # This puts amongst other things all the configured products directories
    # into the Products.__path__ so we can put those on the test path
    handlers.root_handler(options.configroot)

    # We need to apply the configuration in one more place
    import App.config
    App.config.setConfiguration(options.configroot)

    # The PYTHONPATH is not set, so all commands starting a new shell fail
    # unless we set it explicitly
    os.environ['PYTHONPATH'] = os.path.pathsep.join(sys.path)

    # Add the path to the zopeservice.py script, which is needed for some of the
    # Windows specific commands
    servicescript = os.path.join(options.configroot.instancehome,
                                 'bin', 'zopeservice.py')
    options.servicescript = [options.python, servicescript]

    # If no command was specified we go into interactive mode.
    if options.args:
        c.onecmd(" ".join(options.args))
    else:
        options.interactive = 1
    if options.interactive:
        try:
            import readline
        except ImportError:
            pass
        print "program:", " ".join(options.program)
        c.do_status()
        c.cmdloop()
Пример #2
0
def main(args=None):
    # This is mainly a copy of zopectl.py's main function from Zope2.Startup
    options = zopectl.ZopeCtlOptions()
    # Realize arguments and set documentation which is used in the -h option
    options.realize(args, doc=__doc__)
    # We use our own ZopeCmd set, that is derived from the original one.
    c = AdjustedZopeCmd(options)

    # We need to apply a number of hacks to make things work:

    # This puts amongst other things all the configured products directories
    # into the Products.__path__ so we can put those on the test path
    handlers.root_handler(options.configroot)

    # We need to apply the configuration in one more place
    import App.config
    App.config.setConfiguration(options.configroot)

    # The PYTHONPATH is not set, so all commands starting a new shell fail
    # unless we set it explicitly
    os.environ['PYTHONPATH'] = os.path.pathsep.join(sys.path)

    # Add the path to the zopeservice.py script, which is needed for some of the
    # Windows specific commands
    servicescript = os.path.join(options.configroot.instancehome,
                                 'bin', 'zopeservice.py')
    options.servicescript = [options.python, servicescript]

    # If no command was specified we go into interactive mode.
    if options.args:
        c.onecmd(" ".join(options.args))
    else:
        options.interactive = 1
    if options.interactive:
        try:
            import readline
        except ImportError:
            pass
        print "program:", " ".join(options.program)
        c.do_status()
        c.cmdloop()

    # Ideally we would return the exit code and let our caller deal with the exit code
    # return  c._exitstatus

    # but zc.buildout doesnt let ./bin/instance set an exit code so lets just exit here
    # Also, if a run causes an exit code of 256, we get 0 when this process dies so force
    # to 1 or 0
    sys.exit(c._exitstatus != 0)
Пример #3
0
def initialize_zope(instance, zconfig, productdistros):
    """ This is about 85% evil (+/- 10%). We set up enough of zope's insane startup
    process that we can access all our Python and unpickle stuff, but not so
    much that it opens the ZODB. """
    if productdistros is not None:
        ppath = Products.__path__[:]
        ppath.append(productdistros)
        Products.__path__ = ppath
    Globals.INSTANCE_HOME = instance
    options = zopectl.ZopeCtlOptions()
    options.configfile = zconfig
    sys.argv = sys.argv[:1]
    options.realize()
    root_handler(options.configroot) # wild guess
    App.config.setConfiguration(options.configroot)