def test_reader_redirect(all_zims, filename, test_redirect, test_redirect_to): zim = Archive(all_zims / filename) if test_redirect: assert zim.get_entry_by_path(test_redirect).is_redirect if test_redirect_to: target_entry = zim.get_entry_by_path(test_redirect) assert target_entry.get_redirect_entry().path == test_redirect_to # make sure get_item resolves it assert target_entry.get_item().path == test_redirect_to # should be last redirect assert target_entry.get_redirect_entry().is_redirect is False with pytest.raises(RuntimeError): target_entry.get_redirect_entry().get_redirect_entry()
def test_fileprovider(fpath, lipsum): lipsum_fpath = fpath.with_name("lipsum.html") with open(lipsum_fpath, "w") as fh: for _ in range(0, 10): fh.write(lipsum) item = StaticItem(path=HOME_PATH, filepath=lipsum_fpath, mimetype="text/html") assert HOME_PATH in str(item) assert item.get_title() in str(item) with Creator(fpath) as c: c.add_item(item) zim = Archive(fpath) with open(lipsum_fpath, "rb") as fh: assert bytes( zim.get_entry_by_path(HOME_PATH).get_item().content) == fh.read() # test feed streaming cp = item.get_contentprovider() b = cp.feed() while b.size(): assert isinstance(b, Blob) b = cp.feed()
def test_reader_get_entries( all_zims, filename, test_path, test_title, test_mimetype, test_size, test_content_includes, ): zim = Archive(all_zims / filename) # entries with pytest.raises(KeyError): zim.get_entry_by_path("___missing") if test_path: assert zim.has_entry_by_path(test_path) entry = zim.get_entry_by_path(test_path) assert entry.title == test_title assert entry.path == test_path assert test_path in str(entry) assert test_title in str(entry) item = entry.get_item() assert item.title == test_title assert item.path == test_path assert test_path in str(item) assert test_title in str(item) assert item.mimetype == test_mimetype assert item.size == test_size assert isinstance(item.content, memoryview) assert test_content_includes in bytes(item.content).decode("UTF-8") with pytest.raises(KeyError): zim.get_entry_by_title("___missing") if test_title: assert zim.has_entry_by_title(test_title) assert zim.get_entry_by_title(test_title).path == entry.path
def test_creator_redirection(fpath, lipsum_item): # ensure we can't add if not started c = Creator(fpath) with pytest.raises(RuntimeError, match="not started"): c.add_redirection("home", "hello", HOME_PATH) del c with Creator(fpath) as c: c.add_item(lipsum_item) c.add_redirection("home", "hello", HOME_PATH) c.add_redirection("accueil", "bonjour", HOME_PATH) zim = Archive(fpath) assert zim.entry_count == 3 assert zim.has_entry_by_path("home") is True assert zim.has_entry_by_path("accueil") is True assert zim.get_entry_by_path("home").is_redirect assert (zim.get_entry_by_path("home").get_redirect_entry().path == zim.get_entry_by_path(HOME_PATH).path) assert zim.get_entry_by_path("accueil").get_item().path == HOME_PATH assert "home" in list(zim.suggest("hello")) assert "accueil" in list(zim.suggest("bonjour"))
def test_stringprovider(fpath, lipsum): item = StaticItem(path=HOME_PATH, content=lipsum, mimetype="text/html") assert HOME_PATH in str(item) assert item.get_title() in str(item) with Creator(fpath) as c: c.add_item(item) zim = Archive(fpath) assert bytes(zim.get_entry_by_path( HOME_PATH).get_item().content) == lipsum.encode("UTF-8") # test feed streaming cp = item.get_contentprovider() b = cp.feed() while b.size(): assert isinstance(b, Blob) b = cp.feed()
item = TestItem("Monadical_SAS", "Monadical", content) item2 = TestItem("Monadical_2", "Monadical 2", content2) zim_file_path = f"kiwix-test-{uuid.uuid1()}.zim" print(f"Testing writer for {zim_file_path}") with Creator(zim_file_path).config_indexing(True, "eng").config_minclustersize( 512 ) as zc: zc.set_mainpath("Monadical") zc.add_item(item) zc.add_item(item2) for name, value in { "creator": "python-libzim", "description": "Created in python", "name": "Hola", "publisher": "Monadical", "title": "Test Zim", }.items(): zc.add_metadata(name.title(), value.encode("UTF-8")) print("Testing reader") zim = Archive(zim_file_path) entry = zim.get_entry_by_path("Monadical") print(f"Main entry is at {zim.main_entry.get_item().path}") print(f"Entry {entry.title} at {entry.path} is {entry.get_item().size}b:") print(bytes(entry.get_item().content).decode("UTF-8"))
# -*- coding:utf-8 -*- from libzim.reader import Archive zim = Archive("/home/xiaohe/wikiZIM/wikipedia_zh_all.zim") print(f"Main entry is at {zim.main_entry.get_item().path}") entry = zim.get_entry_by_path("性交") print(f"Entry {entry.title} at {entry.path} is {entry.get_item().size}b:") print(bytes(entry.get_item().content).decode("UTF-8"))