Exemplo n.º 1
0
    def singleton_valiant(command: "BaseCommand") -> Valiant:
        """This should only create 1 instance of Valiant.

        Also, handles the --config option.

        Args:
            command: Used to grab the cli options

        Returns:
            The hopefully single instance.

        Raises:
            ValueError: When a Valiant instance couldn't be created.
        """
        from pathlib import Path
        from valiant.config.util import (
            ConfigMapBuilder,
            create_valiant_builder,
        )
        from valiant.config.source import TomlSource

        if not BaseCommand.__valiant:
            config_builder = create_valiant_builder()
            if command.option("config"):
                config_builder.add_source(
                    TomlSource(Path(command.option("config")), optional=False)
                )
            conf_map = config_builder.build()

            if not conf_map:
                raise ValueError("Failed to construct the Valiant configuration.")

            conf = ConfigMapBuilder.generate_valiant_config_from_map(conf_map)
            BaseCommand.__valiant = Valiant(conf)
        return BaseCommand.__valiant
Exemplo n.º 2
0
def test_valiant_all_config_builder(
    pypi_repo: PyPiRepository,
    valiant_app_name: str,
    valiant_version: str,
    datafiles: py.path,
) -> None:
    """Tests the config builder with the pyproject, user and site file overlays."""
    import shutil
    from valiant.config.util import create_valiant_builder
    from .util import get_config_instance

    # Copy over pyproject.toml
    assert os.listdir(os.getcwd()) == []
    shutil.copy(os.path.join(datafiles, "pyproject.toml"), os.getcwd())
    assert os.listdir(os.getcwd()) == ["pyproject.toml"]

    vb = create_valiant_builder()
    c = get_config_instance(vb)

    assert c.configuration_dir == Path("/tmp/valiant_test/project/etc")  # noqa: S108
    assert c.cache_dir == Path("/tmp/valiant_test/project/var/cache")  # noqa: S108
    assert c.log_dir == Path("/tmp/valiant_test/project/var/log")  # noqa: S108
    assert c.default_reports == set(["safety"])
    assert c.local_plugin_paths == ["/usr/local/lib", "./project_lib"]
    assert c.local_report_plugins == {"project_report": "myprojectpkg.Reporter:Report1"}
Exemplo n.º 3
0
def test_valiant_site_config_builder(datafiles: py.path,) -> None:
    """Tests the config builder with a site config file overlay."""
    from valiant.config.util import create_valiant_builder
    from .util import get_config_instance

    vb = create_valiant_builder(include_pyproject=False)
    c = get_config_instance(vb)
    datafiles.listdir()
    assert c.configuration_dir == Path("/tmp/valiant_test/opt/etc")  # noqa: S108
    assert c.cache_dir == Path("/tmp/valiant_test/opt/var/cache")  # noqa: S108
    assert c.log_dir == Path("/tmp/valiant_test/opt/var/log")  # noqa: S108
    assert c.default_reports == set(["basic"])
    assert c.local_plugin_paths == []
    assert c.local_report_plugins == {}
Exemplo n.º 4
0
def test_valiant_user_and_site_config_builder(datafiles: py.path,) -> None:
    """Tests the config builder with site and user config file overlays."""
    from valiant.config.util import create_valiant_builder
    from .util import get_config_instance

    vb = create_valiant_builder(include_pyproject=False)
    c = get_config_instance(vb)

    assert c.configuration_dir == Path("/tmp/valiant_test/usr/local/etc")  # noqa: S108
    assert c.cache_dir == Path("/tmp/valiant_test/usr/local/var/cache")  # noqa: S108
    assert c.log_dir == Path("/tmp/valiant_test/usr/local/var/log")  # noqa: S108
    assert c.default_reports == set(["safety", "spdx"])
    assert c.local_plugin_paths == ["/usr/local/lib"]
    assert c.local_report_plugins == {"report1": "mypkg.Reporter:Report1"}
Exemplo n.º 5
0
def test_valiant_default_config_builder(
    tmp_path: Path,
    pypi_repo: PyPiRepository,
    valiant_app_name: str,
    valiant_version: str,
) -> None:
    """Tests the config builder with no config file overlays."""
    from string import Template
    from valiant.config.util import create_valiant_builder
    from .util import get_config_instance

    vb = create_valiant_builder(
        include_pyproject=False, include_user_config=False, include_site_config=False
    )
    c = get_config_instance(vb)

    assert c.configuration_dir == tmp_path / "user_config_dir"
    assert c.cache_dir == tmp_path / "user_cache_dir"
    assert c.log_dir == tmp_path / "user_log_dir"

    # Repository config
    assert c.default_repository == "pypi"
    assert c.default_repository_name == "pypi"
    assert c.repository_configurations == {"pypi": pypi_repo}
    assert c.default_repository_configuration == pypi_repo
    assert c.repository_names == ["pypi"]
    assert c.get_repository_configuration("pypi") == pypi_repo

    # Report config
    assert c.default_reports == set(["basic", "safety", "spdx"])

    # Local plugins should be empty
    assert c.local_plugin_paths == []
    assert c.local_report_plugins == {}

    # Logging
    assert not c.logging_configuration_file

    # Requests cache
    assert c.requests_cache["backend"] == "sqlite"
    assert c.requests_cache["expire_after"] == 86400
    assert (
        Template(str(c.requests_cache["file"])).substitute(
            log_dir=c.log_dir,
            cache_dir=c.cache_dir,
            configuration_dir=c.configuration_dir,
        )
        == f"{c.cache_dir}/{valiant_app_name}-{valiant_version}-requests-cache"
    )