Esempio n. 1
0
def test_that_logger_with_high_verbosity_level_does_emit_info_logs(
        logger: Logger, level: Verbosity):
    logger.set_verbosity(level)
    logger.info("test")

    output = get_logger_output(logger)
    assert "INFO" in output
Esempio n. 2
0
def test_that_logger_with_low_verbosity_level_does_not_emit_info_logs(
        logger: Logger, level):
    logger.set_verbosity(level)
    logger.info("test")

    output = get_logger_output(logger)
    assert "INFO" not in output
Esempio n. 3
0
def format_nix_files(logger: Logger) -> None:
    if is_nixfmt_installed():
        logger.info("Formatting nix files")
        integration_test_nix_files = find_nix_files_in_integration_tests()
        subprocess.run(
            ["nixfmt", "default.nix", "src/pypi2nix/pip/bootstrap.nix"] +
            integration_test_nix_files,
            check=True,
        )
    else:
        logger.warning(
            "Could not find `nixfmt` executable.  Cannot format .nix files")
Esempio n. 4
0
def main(
    packages_metadata: Iterable[Wheel],
    sources: Sources,
    requirements_name: str,
    requirements_frozen: str,
    extra_build_inputs: Iterable[str],
    enable_tests: bool,
    python_version: PythonVersion,
    target_directory: str,
    logger: Logger,
    common_overrides: Iterable[Overrides] = [],
) -> None:
    """Create Nix expressions.
    """

    default_file = os.path.join(target_directory, f"{requirements_name}.nix")
    overrides_file = os.path.join(target_directory,
                                  f"{requirements_name}_override.nix")
    frozen_file = os.path.join(target_directory,
                               f"{requirements_name}_frozen.txt")

    metadata_by_name: Dict[str, Wheel] = {x.name: x for x in packages_metadata}

    generated_packages_metadata = []
    for item in sorted(packages_metadata, key=lambda x: x.name):
        if item.build_dependencies:
            buildInputs = "\n".join(
                sorted([
                    '        self."{}"'.format(dependency.name())
                    for dependency in item.build_dependencies
                ]))
            buildInputs = "[\n" + buildInputs + "\n      ]"
        else:
            buildInputs = "[ ]"
        propagatedBuildInputs = "[ ]"
        dependencies = item.dependencies(extras=[])
        if dependencies:
            deps = [
                x.name() for x in dependencies
                if x.name() in metadata_by_name.keys()
            ]
            if deps:
                propagatedBuildInputs = "[\n%s\n      ]" % ("\n".join(
                    sorted([
                        '        self."%s"' % (metadata_by_name[x].name)
                        for x in deps if x != item.name
                    ])))
        source = sources[item.name]
        fetch_expression = source.nix_expression()
        package_format = item.package_format
        generated_packages_metadata.append(
            dict(
                name=item.name,
                version=item.version,
                fetch_expression=fetch_expression,
                buildInputs=buildInputs,
                propagatedBuildInputs=propagatedBuildInputs,
                homepage=item.homepage,
                license=item.license,
                description=item.description,
                package_format=package_format,
            ))

    templates = jinja2.Environment(
        loader=jinja2.FileSystemLoader(HERE + "/templates"))

    generated_template = templates.get_template("generated.nix.j2")
    generated = "\n\n".join(
        generated_template.render(**x) for x in generated_packages_metadata)

    overrides = templates.get_template("overrides.nix.j2").render()

    common_overrides_expressions = [
        "    (" + override.nix_expression(logger) + ")"
        for override in common_overrides
    ]

    default_template = templates.get_template("requirements.nix.j2")
    overrides_file_nix_path = os.path.join(".",
                                           os.path.split(overrides_file)[1])
    default = default_template.render(
        version=pypi2nix_version,
        command_arguments=" ".join(map(shlex.quote, sys.argv[1:])),
        python_version=python_version.derivation_name(),
        extra_build_inputs=(extra_build_inputs and "with pkgs; [ %s ]" %
                            (" ".join(extra_build_inputs)) or "[]"),
        overrides_file=overrides_file_nix_path,
        enable_tests=str(enable_tests).lower(),
        generated_package_nix=generated,
        common_overrides="\n".join(common_overrides_expressions),
        python_major_version=python_version.major_version(),
    )

    if not os.path.exists(overrides_file):
        with open(overrides_file, "w+") as f:
            f.write(overrides.strip())
            logger.info("|-> writing %s" % overrides_file)

    with open(default_file, "w+") as f:
        f.write(default.strip())

    with open(frozen_file, "w+") as f:
        f.write(requirements_frozen)
Esempio n. 5
0
def test_every_info_line_is_prefixed(logger: Logger):
    logger.info("line1\nline2")

    output = get_logger_output(logger)
    assert "INFO: line1" in output
    assert "INFO: line2" in output
Esempio n. 6
0
def test_can_log_info(logger: Logger):
    logger.info("test")

    assert "INFO: test" in get_logger_output(logger)