Пример #1
0
def test_refs(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "file1.rst",
        """

:jinja:`{{ page.link_to("./file2.rst") }}`

""",
    )
    siteroot.write_text(
        siteroot.contents / "file2.rst",
        """
""",
    )

    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()
    orig_outputinfos = depends.update_outputinfos(site, [], results)
    depends.save_deps(site, deps, orig_outputinfos, errors)

    # test update depends
    (siteroot.contents / "file2.rst").write_text("")
    site.load(site.root, {})
    rebuild, updated, depdict, outputfinos = depends.check_depends(site)

    assert rebuild is False
    assert updated == set((
        ((), "file1.rst"),
        ((), "file2.rst"),
    ))
Пример #2
0
def test_load(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.path / "hooks.py",
        """
from miyadaiku.extend import *

@pre_load
def pre_load1(site, contentsrc, binary):
    contentsrc.metadata['title'] = 'hook_pre'
    return contentsrc

@post_load
def post_load1(site, contentsrc, binary, bytes):
    contentsrc.metadata['title'] = contentsrc.metadata['title'] + 'hook_post'
    return contentsrc, bytes

@load_finished
def load_finished1(site):
    load_finished1.called = 1

""",
    )

    siteroot.write_text(siteroot.contents / "root1.txt", "content_root1")

    extend.load_hook(siteroot.path)
    site = siteroot.load({}, {})

    root1 = site.files.get_content(((), "root1.txt"))
    assert root1.src.metadata["title"] == "hook_prehook_post"

    assert 1 == extend.hooks_load_finished[0].called  # type: ignore
Пример #3
0
def test_index(siteroot: SiteRoot) -> None:
    for i in range(21):
        f"tag{i % 2 + 1}"
        siteroot.write_text(
            siteroot.contents / f"htmldir/{i}.html",
            f"""
html{i}
""",
        )

    siteroot.write_text(
        siteroot.contents / "htmldir/index.yml",
        """
type: index
""",
    )

    site = siteroot.load({}, {})
    builders = builder.create_builders(
        site, site.files.get_content((("htmldir", ), "index.yml")))
    indexbuilders = cast(List[builder.IndexBuilder], builders)
    jinjaenv = site.build_jinjaenv()
    for b in indexbuilders:
        ctx = b.build_context(site, jinjaenv)
        (f, ) = ctx.build()

    assert len(indexbuilders) == 4
    assert sum(len(b.items) for b in indexbuilders) == 21
Пример #4
0
def test_update_file(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "file1.rst",
        """
:jinja:`{{ page.link_to("./file2.rst") }}`
""",
    )
    siteroot.write_text(
        siteroot.contents / "file2.rst",
        """
""",
    )

    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()

    orig_outputinfos = depends.update_outputinfos(site, [], results)
    depends.save_deps(site, deps, orig_outputinfos, errors)

    output = siteroot.outputs / "file1.html"
    output.unlink()

    rebuild, updated, depdict, outputinfos = depends.check_depends(site)
    assert rebuild is False
    assert updated == set((((), "file1.rst"), ))

    ok, err, deps, results, errors = site.build()
    assert deps[((), "file1.rst")][2] == {"file1.html"}
    assert deps[((), "file2.rst")][2] == {"file2.html"}
Пример #5
0
def test_get_contents_none(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "a.rst",
        """
.. article::
   :date: 2017-01-01
   :category: A
   :tags: tag1, tag2
   :prop1: propvalue1
test
""",
    )

    siteroot.write_text(
        siteroot.contents / "b.rst",
        """
.. article::
   :date: 2017-01-01
test
""",
    )

    s = siteroot.load({}, {})

    found = s.files.get_contents(s, filters={"tags": None})
    assert set(f.src.contentpath for f in found) == set([((), "b.rst")])

    found = s.files.get_contents(s, filters={"prop1": None})
    assert set(f.src.contentpath for f in found) == set([((), "b.rst")])
Пример #6
0
def test_build(siteroot: SiteRoot, debug: bool) -> None:
    siteroot.write_text(
        siteroot.path / "hooks.py",
        """
from miyadaiku.extend import *

@pre_build
def pre_build1(ctx):
    ctx.content.body = b"pre_build"
    return ctx

@post_build
def post_build1(ctx, outputinfos):
    org = outputinfos[0].filename.read_bytes()
    outputinfos[0].filename.write_bytes(org+b"post_build1")
""",
    )

    siteroot.write_text(siteroot.contents / "root1.txt", "content_root1")

    extend.load_hook(siteroot.path)
    site = siteroot.load({}, {}, debug=debug)
    site.build()

    assert len(extend.hooks_pre_build) == 1
    assert len(extend.hooks_post_build) == 1

    assert b"pre_buildpost_build1" == (siteroot.outputs / "root1.txt").read_bytes()
Пример #7
0
def test_hook(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.path / "hooks.py",
        """
from miyadaiku.extend import *


@finished
def fin(site):
    fin.called = 1

@finished
def fin2(site):
    fin2.called = 1


@initialized
def initialized(site):
    initialized.called = 1

""",
    )

    extend.load_hook(siteroot.path)
    site = siteroot.load({}, {})
    extend.run_finished(site)

    assert len(extend.hooks_finished) == 2
    assert [1, 1] == [f.called for f in extend.hooks_finished]  # type: ignore

    assert len(extend.hooks_initialized) == 1
    assert extend.hooks_initialized[0].called == 1  # type: ignore
Пример #8
0
def test_indexbuilder(siteroot: SiteRoot) -> None:
    for i in range(21):
        siteroot.write_text(siteroot.contents / f"rstdir/{i}.rst", f"rst_{i}")

    siteroot.write_text(
        siteroot.contents / "rstdir/index.yml",
        """
type: index
indexpage_max_articles: 10
directory: rstdir
""",
    )

    site = siteroot.load({}, {})

    builders = builder.create_builders(
        site, site.files.get_content((("rstdir", ), "index.yml")))

    indexbuilders = cast(List[builder.IndexBuilder], builders)

    assert indexbuilders[0].cur_page == 1
    assert indexbuilders[0].num_pages == 2
    assert len(indexbuilders[0].items) == 10

    assert indexbuilders[1].cur_page == 2
    assert indexbuilders[1].num_pages == 2
    assert len(indexbuilders[1].items) == 11
Пример #9
0
def test_jinja_templ_err(siteroot: SiteRoot) -> None:
    mp_log.init_logging()
    siteroot.write_text(
        siteroot.templates / "page_article.html",
        """1
2
{{ 1/0}}
3
4
5
""",
    )

    siteroot.write_text(siteroot.contents / "test.html", "test")

    site = siteroot.load({}, {})
    jinjaenv = site.build_jinjaenv()
    ctx = context.JinjaOutput(site, jinjaenv, ((), "test.html"))

    try:
        context.eval_jinja_template(ctx, ctx.content, "page_article.html", {})
    except exceptions.JinjaEvalError as e:
        assert e.errors[0][1] == 3
        assert ">>> {{ 1/0}}" in e.errors[0][2]
    else:
        assert False
Пример #10
0
def test_binarycontext(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.files / "subdir" / "file1.txt",
                        "subdir/file1")
    site = siteroot.load({}, {})

    jinjaenv = site.build_jinjaenv()
    ctx = context.BinaryOutput(site, jinjaenv, (("subdir", ), "file1.txt"))
    (outputinfo, ) = ctx.build()

    assert Path(outputinfo.filename) == site.outputdir / "subdir/file1.txt"
    assert Path(outputinfo.filename).read_text() == "subdir/file1"
Пример #11
0
def test_yaml(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.contents / "file1.rst", "")

    site = siteroot.load({}, {})
    ok, err, deps, results, errors = site.build()
    orig_outputinfos = depends.update_outputinfos(site, [], results)
    depends.save_deps(site, deps, orig_outputinfos, errors)

    siteroot.write_text(siteroot.contents / "file2.yml", "")

    rebuild, updated, depdict, outputresults = depends.check_depends(site)
    assert rebuild is True
Пример #12
0
def test_indexbuilder_group(siteroot: SiteRoot) -> None:
    for i in range(21):
        tag = f"tag{i % 2 + 1}"
        siteroot.write_text(
            siteroot.contents / f"htmldir/{i}.html",
            f"""
tags: {tag}

html{i} - tag: {tag}
""",
        )

    siteroot.write_text(
        siteroot.contents / "htmldir/index.yml",
        """
type: index
groupby: tags

""",
    )

    site = siteroot.load({}, {})

    builders = builder.create_builders(
        site, site.files.get_content((("htmldir", ), "index.yml")))

    indexbuilders = cast(List[builder.IndexBuilder], builders)

    assert len(indexbuilders) == 4

    assert indexbuilders[0].cur_page == 1
    assert indexbuilders[0].num_pages == 2
    assert indexbuilders[0].value == "tag1"
    assert len(indexbuilders[0].items) == 5

    assert indexbuilders[1].cur_page == 2
    assert indexbuilders[1].num_pages == 2
    assert indexbuilders[1].value == "tag1"
    assert len(indexbuilders[1].items) == 6

    assert indexbuilders[2].cur_page == 1
    assert indexbuilders[2].num_pages == 2
    assert indexbuilders[2].value == "tag2"
    assert len(indexbuilders[2].items) == 5

    assert indexbuilders[3].cur_page == 2
    assert indexbuilders[3].num_pages == 2
    assert indexbuilders[3].value == "tag2"
    assert len(indexbuilders[3].items) == 5

    jinjaenv = site.build_jinjaenv()
    context = indexbuilders[0].build_context(site, jinjaenv)
    assert context.contentpath == (("htmldir", ), "index.yml")
Пример #13
0
def test_macro(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.contents / "file1.rst", "")
    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()
    orig_outputinfos = depends.update_outputinfos(site, [], results)
    depends.save_deps(site, deps, orig_outputinfos, errors)

    # test macro
    (siteroot.modules / "file1.rst").write_text("""
file1-new-title
----------------------------
""")
Пример #14
0
def test_load(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.contents / "A/B/C/file1.html",
                        "A/B/C/file1.html")
    siteroot.write_text(siteroot.contents / "A/B/D/file2.html",
                        "A/B/D/file1.html")

    site = siteroot.load({}, {})
    jinjaenv = site.build_jinjaenv()
    ctx = context.JinjaOutput(site, jinjaenv, (("A", "B", "C"), "file1.html"))
    proxy = context.ContentProxy(ctx, ctx.content)

    file2 = proxy.load("../D/file2.html")
    assert file2.contentpath == (("A", "B", "D"), "file2.html")
Пример #15
0
def test_error(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "file1.rst",
        """
test
-----------

:jinja:`{{page.load('file2.rst').html}}`

""",
    )
    siteroot.write_text(siteroot.contents / "file2.rst", ":jinja:`{{@@}}`")

    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()
    assert ok == 0
    assert err == len(errors) == 2

    siteroot.write_text(siteroot.contents / "file2.rst", "")
    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()
    assert ok == 2
    assert err == len(errors) == 0
Пример #16
0
def test_htmlcontext(siteroot: SiteRoot) -> None:

    siteroot.write_text(siteroot.contents / "doc.html", "hello<a>{{1+1}}</a>")
    siteroot.write_text(siteroot.templates / "page_article.html",
                        "<div>{{ page.html }}</div>")
    site = siteroot.load({}, {})
    jinjaenv = site.build_jinjaenv()

    ctx = context.JinjaOutput(site, jinjaenv, ((), "doc.html"))
    (outputinfo, ) = ctx.build()
    html = Path(outputinfo.filename).read_text()
    assert html == "<div>hello<a>2</a></div>"

    assert ctx.get_url() == "http://localhost:8888/doc.html"
Пример #17
0
def test_theme_cssfile(siteroot: SiteRoot) -> None:
    site = siteroot.load({}, {})
    ipynb.init(site)

    siteroot.write_text(
        siteroot.contents / "test.html",
        """
{{ipynb.load_css(page)}}
""",
    )
    site = siteroot.load({"themes": ["miyadaiku.themes.ipynb"]}, {})
    site.build()

    s = (siteroot.outputs / "test.html").read_text()
    assert '<link href="static/ipynb/ipynb.css" rel="stylesheet"/>' in s
    assert (siteroot.outputs / "static/ipynb/ipynb.css").exists()
Пример #18
0
def test_theme(siteroot: SiteRoot) -> None:
    site = siteroot.load({}, {})
    ipynb.init(site)

    site = siteroot.load({"themes": ["miyadaiku.themes.ipynb"]}, {})
    jinjaenv = site.build_jinjaenv()
    template = jinjaenv.from_string("{{ipynb.set_header()}}")
    ret = template.render()

    soup = BeautifulSoup(ret, "html.parser")

    assert soup.head is None
    assert soup.body is None
    assert soup.title is None
    assert soup.meta is None
    assert len(soup.find_all("style")) > 1
    assert len(soup.find_all("script")) > 1
Пример #19
0
def test_mpbuild(log: Any, siteroot: SiteRoot) -> None:
    mp_log.init_logging()
    siteroot.write_text(
        siteroot.templates / "page_article.html",
        """
{{ page.html }}
""",
    )

    siteroot.write_text(siteroot.contents / "test.html", "test")

    site = siteroot.load({}, {}, debug=False)
    site.build()
    args, kwargs = log.call_args_list[0]

    assert str(siteroot.contents /
               "test.html") in kwargs["extra"]["msgdict"]["msg"]
Пример #20
0
def test_image(siteroot: SiteRoot) -> None:

    siteroot.write_text(siteroot.contents / "img/img.png", "")
    siteroot.write_text(
        siteroot.contents / "index.rst",
        """
.. jinja::

   {{ macros.image(page.load('/img/img.png')) }}
""",
    )

    site = siteroot.load({}, {})
    site.build()

    ret = (siteroot.outputs / "index.html").read_text()
    assert "img/img.png" in ret
Пример #21
0
def test_site(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "root1.yml",
        """
root_prop: root_prop_value
generate_metadata_file: true
""",
    )
    siteroot.write_text(siteroot.contents / "root1.txt", "content_root1")
    siteroot.write_text(siteroot.contents / "root2.rst", "content_root2")
    siteroot.write_text(siteroot.files / "root1.txt", "file_root1")

    site = siteroot.load(
        {
            "themes": ["package3"],
            "root_prop": "root_prop_value"
        }, {"prop": "prop_value"})

    assert (siteroot.contents / "root1.txt.props.yml").exists()
    assert (siteroot.contents / "root2.rst.props.yml").exists()

    assert len(site.files._contentfiles) == 6
    assert ((), "root1.txt") in site.files._contentfiles
    assert ((), "package_root.rst") in site.files._contentfiles
    assert ((), "package3_root.rst") in site.files._contentfiles
    assert ((), "package3_files_1.rst") in site.files._contentfiles
    assert ((), "package4_root.rst") in site.files._contentfiles

    assert site.config.get((), "prop") == "prop_value"
    assert site.config.get((), "root_prop") == "root_prop_value"
    assert site.config.get((), "package3_prop") == "package3_prop_value"
    assert site.config.get((), "package3_prop_a1") == "value_package3_a1"
    assert site.config.get((), "package4_prop") == "package4_prop_value"
Пример #22
0
def test_index_group_filename(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "doc1.html",
        """
tags: tag1, tag2

{{ page.link_to("index.yml", group_value="tag1") }}
""",
    )

    for i in range(21):
        siteroot.write_text(
            siteroot.contents / f"htmldir/{i}.html",
            """
tags: tag1
""",
        )

    siteroot.write_text(
        siteroot.contents / "index.yml",
        """
type: index
groupby: tags
indexpage_max_articles: 2
""",
    )

    site = siteroot.load({}, {})
    site.build()
    assert ('<a href="index_tags_tag1.html">index</a>'
            in (siteroot.outputs / "doc1.html").read_text())

    assert len(list(siteroot.outputs.glob("index_tags_tag1*"))) == 11
    assert len(list(siteroot.outputs.glob("index_tags_tag2*"))) == 1
Пример #23
0
def test_og(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.templates / "page_article.html",
        """
{{ macros.opengraph(page) }}
""",
    )

    siteroot.write_text(siteroot.contents / "img/img.png", "")
    siteroot.write_text(
        siteroot.contents / "index.rst",
        """
.. article::
   :og_image: /img/img.png

test article
------------------

body

""",
    )

    site = siteroot.load({}, {})
    site.build()

    ret = (siteroot.outputs / "index.html").read_text()
    assert 'content="http://localhost:8888/img/img.png"' in ret
Пример #24
0
def test_theme_pygments(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "index.rst",
        """
title
----------------
.. jinja::
   {{ pygments.load_css(page) }}
""",
    )

    site = siteroot.load({"themes": ["miyadaiku.themes.pygments"]}, {})
    site.build()

    s = (siteroot.outputs / "index.html").read_text()

    assert '<link href="static/pygments/native.css" rel="stylesheet"/>' in s
    assert (siteroot.outputs / "static/pygments/native.css").exists()
Пример #25
0
def test_metadata(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.contents / "file1.rst", "")
    siteroot.write_text(siteroot.contents / "file2.rst", "")

    site = siteroot.load({}, {})

    ok, err, deps, results, errors = site.build()
    orig_outputinfos = depends.update_outputinfos(site, [], results)
    depends.save_deps(site, deps, orig_outputinfos, errors)

    # test metadata changed
    (siteroot.contents / "file1.rst").write_text("""
file1-new-title
----------------------------
""")
    site.load(site.root, {})
    rebuild, updated, depdict, outputinfos = depends.check_depends(site)

    assert rebuild is True
Пример #26
0
def test_index_group(siteroot: SiteRoot) -> None:
    for i in range(21):
        tag = f"tag{i % 2 + 1}"
        siteroot.write_text(
            siteroot.contents / f"htmldir/{i}.html",
            f"""
tags: {tag}

html{i} - tag: {tag}
""",
        )

    siteroot.write_text(
        siteroot.contents / "htmldir/index.yml",
        """
type: index
groupby: tags
""",
    )

    site = siteroot.load({}, {})
    builders = builder.create_builders(
        site, site.files.get_content((("htmldir", ), "index.yml")))
    indexbuilders = cast(List[builder.IndexBuilder], builders)
    jinjaenv = site.build_jinjaenv()
    for b in indexbuilders:
        ctx = b.build_context(site, jinjaenv)
        assert isinstance(ctx, context.IndexOutput)

        (f, ) = ctx.build()
        url = ctx.get_url()
        if ctx.cur_page == 1:
            assert (
                f'{ctx.content.get_metadata(ctx.site, "groupby")}_{ctx.value}.html'
                in url)
        else:
            assert (
                f'{ctx.content.get_metadata(ctx.site, "groupby")}_{ctx.value}_{ctx.cur_page}.html'
                in url)

    assert len(indexbuilders) == 4
    assert sum(len(b.items) for b in indexbuilders) == 21
Пример #27
0
def test_index_filename(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "doc1.html",
        """
{{ page.link_to("index.yml") }}
""",
    )

    siteroot.write_text(
        siteroot.contents / "index.yml",
        """
type: index
""",
    )

    site = siteroot.load({}, {})
    site.build()

    assert ('<a href="index.html">index</a>'
            in (siteroot.outputs / "doc1.html").read_text())
Пример #28
0
def test_builder(siteroot: SiteRoot) -> None:
    siteroot.write_text(siteroot.contents / "subdir/file1.txt", "subdir/file1")
    site = siteroot.load({"themes": ["package1"]}, {})

    (b, ) = builder.create_builders(
        site, site.files.get_content((("subdir", ), "file1.txt")))

    jinjaenv = site.build_jinjaenv()
    context = b.build_context(site, jinjaenv)
    (path, ) = context.build()
    assert path.filename == site.outputdir / "subdir" / "file1.txt"
    assert path.filename.read_text() == "subdir/file1"

    (b, ) = builder.create_builders(
        site, site.files.get_content(((), "package1_file1.txt")))

    jinjaenv = site.build_jinjaenv()
    context = b.build_context(site, jinjaenv)
    (path, ) = context.build()
    assert path.filename == site.outputdir / "package1_file1.txt"
    assert path.filename.read_text() == "package1_file1.txt\n"
Пример #29
0
def test_walk_directory(siteroot: SiteRoot) -> None:

    file1 = siteroot.write_text(siteroot.contents / "dir1/file1", "")
    siteroot.write_text(siteroot.contents / "dir1/file1.props.yml",
                        "name: value")
    file2 = siteroot.write_text(siteroot.contents / "dir1/dir2/file2", "")
    siteroot.write_text(siteroot.contents / "dir1/file3.bak", "")

    results = loader.walk_directory(siteroot.contents, set(["*.bak"]))

    all = sorted(results, key=lambda d: str(d.srcpath))
    assert len(all) == 2

    assert all[0] == ContentSrc(
        srcpath=str(file2),
        contentpath=(
            (
                "dir1",
                "dir2",
            ),
            "file2",
        ),
        package="",
        metadata={},
        mtime=all[0].mtime,
    )
    assert all[1] == ContentSrc(
        srcpath=str(file1),
        contentpath=(("dir1", ), "file1"),
        package="",
        metadata={"name": "value"},
        mtime=all[1].mtime,
    )
Пример #30
0
def test_theme_docutils_html5(siteroot: SiteRoot) -> None:
    siteroot.write_text(
        siteroot.contents / "abc/index.rst",
        """
title
----------------
.. jinja::
   {{ docutils_html5.load_css(page) }}
""",
    )

    site = siteroot.load({"themes": ["miyadaiku.themes.docutils_html5"]}, {})
    site.build()

    s = (siteroot.outputs / "abc/index.html").read_text()

    print(s)

    assert '<link href="../static/docutils_html5/plain.css" rel="stylesheet"/>' in s
    assert '<link href="../static/docutils_html5/minimal.css" rel="stylesheet"/>' in s
    assert (siteroot.outputs / "static/docutils_html5/plain.css").exists()
    assert (siteroot.outputs / "static/docutils_html5/minimal.css").exists()