Example #1
0
def test_noindexlanguage(tmp_path):
    fpath = tmp_path / "test.zim"
    with Creator(fpath, "welcome", "") as creator:
        creator.add_item(StaticItem(path="welcome", content="hello"))
        creator.update_metadata(language="bam")
        creator.add_item_for("index",
                             "Index",
                             content="-",
                             mimetype="text/html")

    reader = Archive(fpath)
    assert reader.get_metadata("Language").decode(UTF8) == "bam"
    # html content triggers both title and content xapian indexes
    # but since indexing is disabled, we should only have title one
    assert reader.has_title_index
    assert not reader.has_fulltext_index
Example #2
0
 def get_metadata(self, zimfile, name):
     zim_fh = Archive(zimfile)
     return zim_fh.get_metadata(name)
Example #3
0
def test_zim_creator(tmp_path, png_image, html_file, html_str):
    fpath = tmp_path / "test.zim"
    main_path, language, title = "welcome", "fra", "My Title"
    tags = ";".join(["toto", "tata"])

    with open(png_image, "rb") as fh:
        png_data = fh.read()

    with Creator(fpath, main_path, language, title=title,
                 tags=tags) as creator:
        # verbatim HTML from string
        creator.add_item_for("welcome", "wel", content=html_str, is_front=True)
        # verbatim HTML from file
        creator.add_item_for("welcome3", "wel3", fpath=html_file)
        creator.add_item_for("welcome4", "wel4", fpath=html_file)
        # single binary image
        creator.add_item_for("images/yahoo.png",
                             "Home !!",
                             fpath=png_image,
                             is_front=True)
        # redirect to our main page (no title)
        creator.add_redirect("home", "welcome")
        # redirect to our main page (with a custom title)
        creator.add_redirect("home2", "welcome", "Home !!")
        creator.add_redirect("home3", "welcome3", "Home !!", is_front=True)
        creator.add_redirect("home4", "welcome4", "Home !!", is_front=False)

        # ensure args requirement are checked
        with pytest.raises(ValueError,
                           match="One of fpath or content is required"):
            creator.add_item_for("images/yahoo.png")

        with open(png_image, "rb") as fh:
            creator.add_default_illustration(png_data)

    assert fpath.exists()

    reader = Archive(fpath)
    assert reader.get_metadata("Title").decode(UTF8) == title
    assert reader.get_metadata("Language").decode(UTF8) == language
    assert reader.get_metadata("Tags").decode(UTF8) == tags
    assert reader.main_entry.get_item().path == f"{main_path}"
    # make sure we have our image
    assert reader.get_item("images/yahoo.png")
    # make sure we have our redirects
    assert reader.get_entry_by_path("home2").is_redirect
    assert reader.get_entry_by_path(
        "home2").get_redirect_entry().path == f"{main_path}"
    # make sure titles were indexed (html with title for xapian)
    # see https://github.com/openzim/python-libzim/issues/125
    assert "home2" in list(reader.get_suggestions("Home !!"))
    assert "home3" in list(reader.get_suggestions("Home !!"))
    assert "home4" in list(reader.get_suggestions("Home !!"))
    assert "images/yahoo.png" not in list(reader.get_suggestions("Home !!"))
    # make sure full text was indexed
    assert reader.get_search_results_count("PDF doc") >= 1

    # ensure non-rewritten articles have not been rewritten
    assert bytes(reader.get_item("welcome").content).decode(UTF8) == html_str
    assert bytes(reader.get_item("welcome3").content).decode(UTF8) == html_str

    # ensure illustration is present and corrext
    assert reader.has_illustration()
    assert bytes(reader.get_illustration_item().content) == png_data