Exemple #1
0
def test_only_build_toc_files_missing_toc(testdir):
    cli_config = {"latex_individualpages": False}
    user_config = {"only_build_toc_files": True}

    with pytest.raises(ValueError, match=r".*you must have a toc.*"):
        get_final_config(
            None, user_config, cli_config, validate=True, raise_on_invalid=True
        )
def test_mathjax_config_warning_mathjax2path(data_regression):
    mathjax_config = {
        "sphinx": {
            "config": {
                "mathjax_config": {
                    "TeX": {
                        "Macros": {
                            "argmax": "arg\\,max"
                        }
                    }
                },
                "mathjax_path":
                "https://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_CHTML",  # noqa: E501
            }
        }
    }

    cli_config = {"latex_individualpages": False}
    user_config = mathjax_config
    final_config, metadata = get_final_config(
        user_yaml=user_config,
        cli_config=cli_config,
        validate=True,
        raise_on_invalid=True,
    )
    data_regression.check(
        {
            "_user_config": user_config,
            "final": final_config,
            "metadata": metadata
        },
        basename=f"test_mathjax_config_warning_mathjax2path{SPHINX_VERSION}",
    )
def test_mathjax_config_warning(data_regression):
    mathjax_config = {
        "sphinx": {
            "config": {
                "mathjax_config": {
                    "TeX": {
                        "Macros": {
                            "argmax": "arg\\,max"
                        }
                    }
                },
            }
        }
    }
    cli_config = {"latex_individualpages": False}
    user_config = mathjax_config
    final_config, metadata = get_final_config(
        user_yaml=user_config,
        cli_config=cli_config,
        validate=True,
        raise_on_invalid=True,
    )
    data_regression.check(
        {
            "_user_config": user_config,
            "final": final_config,
            "metadata": metadata
        },
        basename=f"test_mathjax_config_warning{SPHINX_VERSION}",
    )
Exemple #4
0
def test_get_final_config_bibtex(data_regression):
    cli_config = {"latex_individualpages": False}
    user_config = {"bibtex_bibfiles": ["tmp.bib"]}
    final_config, metadata = get_final_config(
        None, user_config, cli_config, validate=True, raise_on_invalid=True
    )
    assert "sphinxcontrib.bibtex" in final_config["extensions"]
Exemple #5
0
def sphinx(ctx, path_source, config, toc):
    """Generate a Sphinx conf.py representation of the build configuration."""
    from jupyter_book.config import get_final_config

    path_config, full_path_source, config_overrides = ctx.invoke(
        build,
        path_source=path_source,
        config=config,
        toc=toc,
        get_config_only=True)
    sphinx_config, _ = get_final_config(
        user_yaml=Path(path_config) if path_config else None,
        sourcedir=Path(full_path_source),
        cli_config=config_overrides,
    )
    lines = [
        "###############################################################################",
        "# Auto-generated by `jupyter-book config`",
        "# If you wish to continue using _config.yml, make edits to that file and",
        "# re-generate this one.",
        "###############################################################################",
    ]
    for key in sorted(sphinx_config):
        lines.append(f"{key} = {sphinx_config[key]!r}")
    content = "\n".join(lines).rstrip() + "\n"

    out_folder = Path(path_config).parent if path_config else Path(
        full_path_source)
    existed = out_folder.joinpath("conf.py").exists()
    out_folder.joinpath("conf.py").write_text(content, encoding="utf8")
    click.secho(f"Wrote conf.py to {out_folder}", fg="green")
    if not existed:
        # indicate to pre-commit that the file changed
        sys.exit(2)
Exemple #6
0
def test_get_final_config(user_config, data_regression):
    cli_config = {"latex_individualpages": False}
    final_config, metadata = get_final_config(
        None, user_config, cli_config, validate=True, raise_on_invalid=True
    )
    data_regression.check(
        {"_user_config": user_config, "final": final_config, "metadata": metadata}
    )
Exemple #7
0
def test_get_final_config_custom_myst_extensions(data_regression):
    cli_config = {"latex_individualpages": False}
    user_config = {"parse": {"myst_extra_extensions": ["linkify"]}}
    final_config, metadata = get_final_config(
        None, user_config, cli_config, validate=True, raise_on_invalid=True
    )
    data_regression.check(
        {"_user_config": user_config, "final": final_config, "metadata": metadata}
    )
Exemple #8
0
def test_get_final_config(user_config, data_regression):
    final_config, metadata = get_final_config(user_config,
                                              validate=True,
                                              raise_on_invalid=True)
    data_regression.check({
        "_user_config": user_config,
        "final": final_config,
        "metadata": metadata
    })
Exemple #9
0
def test_only_build_toc_files(testdir, toc_file, filename):
    cli_config = {"latex_individualpages": False}
    toc = Path("toc.yml")
    toc.write_text(f"- file: '{toc_file}'\n")
    Path(filename).write_text("")
    Path("exclude.md").write_text("")
    user_config = {"only_build_toc_files": True}

    final_config, metadata = get_final_config(
        toc, user_config, cli_config, validate=True, raise_on_invalid=True
    )

    assert "exclude.md" in final_config["exclude_patterns"]
    assert filename not in final_config["exclude_patterns"]
Exemple #10
0
def test_only_build_toc_files_with_exclude_patterns(testdir):
    cli_config = {"latex_individualpages": False}
    toc = Path("toc.yml")
    toc.write_text("- file: landing\n")
    Path("landing.md").write_text("")
    Path("exclude.md").write_text("")
    user_config = {
        "only_build_toc_files": True,
        "exclude_patterns": ["my/*", "patterns"],
    }

    final_config, metadata = get_final_config(
        toc, user_config, cli_config, validate=True, raise_on_invalid=True
    )

    assert "exclude.md" in final_config["exclude_patterns"]
    assert "my/*" in final_config["exclude_patterns"]
    assert "patterns" in final_config["exclude_patterns"]
    assert "landing.md" not in final_config["exclude_patterns"]
Exemple #11
0
def sphinx(ctx, path_source, config, toc):
    """Generate a Sphinx conf.py representation of the build configuration."""
    from jupyter_book.config import get_final_config

    path_config, full_path_source, config_overrides = ctx.invoke(
        build,
        path_source=path_source,
        config=config,
        toc=toc,
        get_config_only=True)

    sphinx_config, config_meta = get_final_config(
        user_yaml=Path(path_config) if path_config else None,
        sourcedir=Path(full_path_source),
        cli_config=config_overrides,
    )
    lines = []
    for key in sorted(sphinx_config):
        lines.append(f"{key} = {sphinx_config[key]!r}")

    click.echo("\n".join(lines))
Exemple #12
0
def test_only_build_toc_files_non_default_source_dir(testdir):
    cli_config = {"latex_individualpages": False}
    toc = Path("toc.yml")
    toc.write_text("- file: landing\n")
    sourcedir = Path("s")
    subdir = sourcedir / "subdir"
    subdir.mkdir(parents=True)
    Path(sourcedir / "landing.md").write_text("")
    Path(sourcedir / "exclude.md").write_text("")
    Path(subdir / "sub.md").write_text("")
    user_config = {"only_build_toc_files": True}

    final_config, metadata = get_final_config(
        toc,
        user_config,
        cli_config,
        validate=True,
        raise_on_invalid=True,
        sourcedir=sourcedir,
    )

    assert "exclude.md" in final_config["exclude_patterns"]
    assert "subdir/sub.md" in final_config["exclude_patterns"]
    assert "landing.md" not in final_config["exclude_patterns"]