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
def get_metadata(self, zimfile, name): zim_fh = Archive(zimfile) return zim_fh.get_metadata(name)
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