Example #1
0
def genconfig(config=None, argv=None):
    pluginmanager = get_pluginmanager()

    if argv is None:
        argv = sys.argv
        argv = [str(x) for x in argv]

    if config is None:
        parser = get_parser(pluginmanager)
        parser.description = (
            "Write configuration files for various process managers and "
            "webservers. Takes same arguments as devpi-server.")
        config = parseoptions(pluginmanager, argv, parser=parser)

    tw = py.io.TerminalWriter()
    tw.cwd = py.path.local()

    if not config.args.configfile:
        tw.line(
            "It is highly recommended to use a configuration file for "
            "devpi-server, see --configfile option.",
            red=True)

    destdir = tw.cwd.ensure("gen-config", dir=1)

    new_argv = []
    argv_iter = iter(argv[1:])
    for arg in argv_iter:
        if arg == "--gen-config":
            continue
        if arg.startswith("--serverdir"):
            if '=' not in arg:
                next(argv_iter)  # remove path
            # replace with absolute path
            new_argv.extend(["--serverdir", config.serverdir.strpath])
            continue
        if arg == "-c" or arg.startswith(("--configfile", "-c=")):
            if '=' not in arg:
                next(argv_iter)  # remove path
            # replace with absolute path
            new_argv.extend([
                "--configfile",
                py.path.local(config.args.configfile).strpath
            ])
            continue
        new_argv.append(arg)
    new_args = parseoptions(pluginmanager, ["devpi-server"] + new_argv)
    cfg_types = [
        "cron", "launchd", "nginx", "supervisor", "systemd", "windows_service"
    ]
    for cfg_type in cfg_types:

        def writer(basename, content):
            p = destdir.join(basename)
            p.write(content)
            tw.line("wrote %s" % p.relto(tw.cwd), bold=True)

        name = "gen_" + cfg_type
        globals()[name](tw, new_args, new_argv, writer)
 def test_add_parser_options_called(self):
     l = []
     class Plugin:
         def devpiserver_add_parser_options(self, parser):
             l.append(parser)
     pm = get_pluginmanager()
     pm.register(Plugin())
     parseoptions(pm, ["devpi-server"])
     assert len(l) == 1
     assert isinstance(l[0], MyArgumentParser)
Example #3
0
 def test_add_parser_options_called(self):
     from devpi_server.config import PluginManager
     l = []
     class Plugin:
         def devpiserver_add_parser_options(self, parser):
             l.append(parser)
     hook = PluginManager([(Plugin(), None)])
     parseoptions(["devpi-server"], hook=hook)
     assert len(l) == 1
     assert isinstance(l[0], MyArgumentParser)
Example #4
0
 def test_parse_secret(self, tmpdir):
     p = tmpdir.join("secret")
     secret = "qwoieuqwelkj123"
     p.write(secret)
     config = parseoptions(["devpi-server", "--secretfile=%s" % p])
     assert config.secretfile == str(p)
     assert config.secret == secret
     config = parseoptions(["devpi-server", "--serverdir", tmpdir])
     assert config.secretfile == tmpdir.join(".secret")
     config.secretfile.write(secret)
     assert config.secret == config.secretfile.read()
Example #5
0
 def test_parse_secret(self, tmpdir):
     p = tmpdir.join("secret")
     secret = "qwoieuqwelkj123"
     p.write(secret)
     config = parseoptions(["devpi-server", "--secretfile=%s" % p])
     assert config.secretfile == str(p)
     assert config.secret == secret
     config = parseoptions(["devpi-server", "--serverdir", tmpdir])
     assert config.secretfile == tmpdir.join(".secret")
     config.secretfile.write(secret)
     assert config.secret == config.secretfile.read()
Example #6
0
    def test_add_parser_options_called(self):
        from devpi_server.config import PluginManager
        l = []

        class Plugin:
            def devpiserver_add_parser_options(self, parser):
                l.append(parser)

        hook = PluginManager([(Plugin(), None)])
        parseoptions(["devpi-server"], hook=hook)
        assert len(l) == 1
        assert isinstance(l[0], MyArgumentParser)
Example #7
0
def make_application():
    ### unused function for creating an app
    config = parseoptions()
    xom = XOM(config)
    start_background_tasks_if_not_in_arbiter(xom)
    app = xom.create_app()
    return app
Example #8
0
def clear_index(argv=None):
    if argv is None:
        argv = sys.argv
    else:
        # for tests
        argv = [str(x) for x in argv]
    pluginmanager = get_pluginmanager()
    try:
        parser = MyArgumentParser(description="Clear project search index.",
                                  add_help=False)
        add_help_option(parser, pluginmanager)
        add_configfile_option(parser, pluginmanager)
        add_storage_options(parser, pluginmanager)
        add_indexer_backend_option(parser, pluginmanager)
        config = parseoptions(pluginmanager, argv, parser=parser)
        configure_cli_logging(config.args)
        xom = xom_from_config(config)
        log = xom.log
        log.warn("You should stop devpi-server before running this command.")
        ix = get_indexer(xom)
        ix.delete_index()
        log.info(
            "Index deleted, start devpi-server again to let the index rebuild automatically."
        )
    except Fatal as e:
        tw = py.io.TerminalWriter(sys.stderr)
        tw.line("fatal: %s" % e.args[0], red=True)
        return 1
Example #9
0
def test_indexer_relative_path():
    from devpi_server.config import parseoptions, get_pluginmanager
    from devpi_server.main import Fatal
    from devpi_web.main import get_indexer_from_config
    options = ("--indexer-backend", "whoosh:path=ham")
    config = parseoptions(get_pluginmanager(), ("devpi-server", ) + options)
    with pytest.raises(Fatal, match="must be absolute"):
        get_indexer_from_config(config)
Example #10
0
def test_gendeploycfg(tmpdir, monkeypatch):
    monkeypatch.setattr(gendeploy, "create_crontab", lambda x, y, z: "")
    config = parseoptions(["x", "--port=3200",
                           "--datadir=%s" % tmpdir])
    gendeploy.gendeploycfg(config, tmpdir)
    assert tmpdir.check()
    sup = tmpdir.join("etc/supervisord.conf").read()
    nginx = tmpdir.join("etc/nginx-devpi.conf").read()
    assert "--port=3200" in sup
    assert "proxy_pass http://localhost:3200" in nginx
Example #11
0
def test_gendeploycfg(tmpdir, monkeypatch, opt):
    monkeypatch.setattr(gendeploy, "create_crontab", lambda x, y, z: "")
    config = parseoptions(["x"] + opt + ["--port=3200", "--serverdir", tmpdir])
    gendeploy.gendeploycfg(config, tmpdir)
    assert tmpdir.check()
    sup = tmpdir.join("etc/supervisord.conf").read()
    nginx = tmpdir.join("etc/nginx-devpi.conf").read()
    assert "--port=3200" in sup
    assert "--gendeploy" not in sup
    assert "xyz" not in sup
    assert "proxy_pass http://localhost:3200" in nginx
Example #12
0
def main(argv=None):
    """ devpi-server command line entry point. """
    config = parseoptions(argv)
    if config.args.version:
        print (devpi_server.__version__)
        return


    if config.args.gendeploy:
        from devpi_server.gendeploy import gendeploy
        return gendeploy(config)

    configure_logging(config)
    xom = XOM(config)
    return bottle_run(xom)
Example #13
0
def genconfig(config, argv):
    tw = py.io.TerminalWriter()
    tw.cwd = py.path.local()

    destdir = tw.cwd.ensure("gen-config", dir=1)

    new_argv = [x for x in argv if x != "--gen-config"]
    new_args = parseoptions(get_pluginmanager(), ["devpi-server"] + new_argv)
    for cfg_type in ["supervisor", "nginx", "cron", "launchd", "systemd"]:

        def writer(basename, content):
            p = destdir.join(basename)
            p.write(content)
            tw.line("wrote %s" % p.relto(tw.cwd), bold=True)

        name = "gen_" + cfg_type
        globals()[name](tw, new_args, new_argv, writer)
Example #14
0
def make_config(args):
    return parseoptions(get_pluginmanager(), args)
Example #15
0
 def test_devpi_serverdir_env(self, tmpdir, monkeypatch):
     monkeypatch.setenv("DEVPI_SERVERDIR", tmpdir)
     config = parseoptions(["devpi-server"])
     assert config.serverdir == tmpdir
Example #16
0
 def test_devpi_serverdir_env(self, tmpdir, monkeypatch):
     monkeypatch.setenv("DEVPI_SERVERDIR", tmpdir)
     config = parseoptions(["devpi-server"])
     assert config.serverdir == tmpdir
Example #17
0
def reparse_without_genconfig(config):
    new_args = [x for x in config.args._raw if x != "--gen-config"]
    return parseoptions(get_pluginmanager(), ["devpi-server"] + new_args)
Example #18
0
def reparse_without_genconfig(config):
    new_args = [x for x in config.args._raw if x != "--gen-config"]
    return parseoptions(["devpi-server"] + new_args)
Example #19
0
def config(gentmp):
    serverdir = gentmp()
    pluginmanager = get_pluginmanager()
    return parseoptions(pluginmanager,
                        ["devpi-server", "--serverdir", serverdir.strpath])
Example #20
0
def make_config(args):
    from devpi_server.config import parseoptions, get_pluginmanager
    return parseoptions(get_pluginmanager(), args)
Example #21
0
def make_application(args):
    """ entry point for making an application object with defaults. """
    config = parseoptions(args)
    return XOM(config).create_app()