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)
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)
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()
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
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
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)
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
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
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)
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)
def make_config(args): return parseoptions(get_pluginmanager(), args)
def test_devpi_serverdir_env(self, tmpdir, monkeypatch): monkeypatch.setenv("DEVPI_SERVERDIR", tmpdir) config = parseoptions(["devpi-server"]) assert config.serverdir == tmpdir
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)
def reparse_without_genconfig(config): new_args = [x for x in config.args._raw if x != "--gen-config"] return parseoptions(["devpi-server"] + new_args)
def config(gentmp): serverdir = gentmp() pluginmanager = get_pluginmanager() return parseoptions(pluginmanager, ["devpi-server", "--serverdir", serverdir.strpath])
def make_config(args): from devpi_server.config import parseoptions, get_pluginmanager return parseoptions(get_pluginmanager(), args)
def make_application(args): """ entry point for making an application object with defaults. """ config = parseoptions(args) return XOM(config).create_app()