コード例 #1
0
ファイル: configuration.py プロジェクト: xorhex/mwdb-core
def create_configuration():
    local_user_dir = os.path.expanduser("~/.mwdb-core")
    message = textwrap.dedent(f"""
    Where do you want to place MWDB local files?

    1) Global directories (/var/lib/mwdb-core, /etc/mwdb-core)
    2) Local user directory ({local_user_dir})
    3) Current directory
    """)
    options = {
        "1": ("/var/lib/mwdb-core", "/etc/mwdb-core"),
        "2": (local_user_dir, local_user_dir),
        "3": (".", "."),
    }

    data_dir, config_dir = options[click.prompt(message,
                                                type=click.Choice(
                                                    ["1", "2", "3"]))]
    os.makedirs(data_dir, exist_ok=True)
    os.makedirs(config_dir, exist_ok=True)

    default_postgres_uri = "postgresql://localhost/mwdb"
    postgres_uri = click.prompt("PostgreSQL database connection string",
                                default=default_postgres_uri)

    default_uploads__dir = os.path.join(data_dir, "uploads")
    uploads_dir = click.prompt("Uploads storage path",
                               default=default_uploads__dir,
                               type=click.Path())

    os.makedirs(uploads_dir, exist_ok=True)

    default_base_url = "http://127.0.0.1"
    base_url = click.prompt("Base public URL of MWDB service",
                            default=default_base_url)

    web_dir = os.path.join(data_dir, "web")
    local_plugins_dir = os.path.join(data_dir, "plugins")
    mail_templates_dir = os.path.join(data_dir, "mail_templates")

    configuration = generate_config(
        postgres_uri=postgres_uri,
        uploads_folder=uploads_dir,
        base_url=base_url,
        web_folder=web_dir,
        local_plugins_folder=local_plugins_dir,
        mail_templates_folder=mail_templates_dir,
        secret_key=token_hex(16),
    )
    configuration_path = os.path.join(config_dir, "mwdb.ini")
    with open(configuration_path, "w") as f:
        f.write(configuration)

    logger.info("Configuration stored in %s file.", configuration_path)
    # Reload configuration including provided admin password
    reload_config()
コード例 #2
0
def configure_database():
    upgrade()

    if _is_database_initialized():
        logger.info("Database already initialized... skipping")
        return

    if app_config.mwdb.admin_password:
        admin_password = app_config.mwdb.admin_password
    else:
        while True:
            admin_password = click.prompt(
                "Provide password for MWDB 'admin' account", hide_input=True)
            admin_repeat_password = click.prompt("Repeat password",
                                                 hide_input=True)
            if admin_password == admin_repeat_password:
                break
            click.echo("[!] Passwords doesn't match", err=True)

    _initialize(admin_password)
コード例 #3
0
def npm_build_web(target_dir):
    config_paths = [
        "./package.json",
        "./package-lock.json",
        "./config-overrides.js",
        "./public",
        "./src",
    ]

    with tempfile.TemporaryDirectory() as context_dirname:
        # Copy files to context directory
        logger.info("Creating build context...")
        for path in config_paths:
            src = os.path.join(web_package_dir, path)
            dst = os.path.join(context_dirname, path)
            if os.path.isfile(src):
                shutil.copy(src, dst)
            elif os.path.isdir(src):
                shutil.copytree(src, dst)
            else:
                raise RuntimeError(
                    "Critical error: expected file {} doesn't exist".format(path)
                )

        # Run npm install for web core
        logger.info("Installing dependencies")
        if subprocess.call("npm install", shell=True, cwd=context_dirname):
            raise BuildWebError("'npm install' command failed")

        # Run npm install for plugins
        for plugin, web_plugin_path in discover_web_plugins():
            logger.info("Installing web plugin '%s'", plugin)
            if subprocess.call(
                f"npm install {web_plugin_path}", shell=True, cwd=context_dirname
            ):
                raise BuildWebError(f"'npm install {web_plugin_path}' command failed")

        # Run npm run build
        logger.info("Building web application")
        if subprocess.call("npm run build", shell=True, cwd=context_dirname):
            raise BuildWebError("'npm run build' command failed")

        if os.path.exists(target_dir):
            logger.info("Target %s exists, removing", target_dir)
            shutil.rmtree(target_dir)

        logger.info("Collecting artifacts to %s", target_dir)
        shutil.move(os.path.join(context_dirname, "build"), target_dir)
        logger.info("Web application built successfully!")