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}", )
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"]
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)
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} )
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} )
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 })
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"]
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"]
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))
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"]