%global _empty_manifest_terminate_build 0 Name: python-libzim Version: 3.1.0 Release: 1 Summary: A python-facing API for creating and interacting with ZIM files License: GPL-3.0-or-later URL: https://github.com/openzim/python-libzim Source0: https://mirrors.nju.edu.cn/pypi/web/packages/45/1a/129c826240f7965173f3c66cfc31aa3da97e4a3eb667572bb31a8cb3d9d2/libzim-3.1.0.tar.gz BuildArch: noarch %description # python-libzim `libzim` module allows you to read and write [ZIM files](https://openzim.org) in Python. It provides a shallow python interface on top of the [C++ `libzim` library](https://github.com/openzim/libzim). It is primarily used in [openZIM](https://github.com/openzim/) scrapers like [`sotoki`](https://github.com/openzim/sotoki) or [`youtube2zim`](https://github.com/openzim/youtube). [![Build Status](https://github.com/openzim/python-libzim/workflows/test/badge.svg?query=branch%3Amain)](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) [![CodeFactor](https://www.codefactor.io/repository/github/openzim/python-libzim/badge)](https://www.codefactor.io/repository/github/openzim/python-libzim) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![PyPI version shields.io](https://img.shields.io/pypi/v/libzim.svg)](https://pypi.org/project/libzim/) [![codecov](https://codecov.io/gh/openzim/python-libzim/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/python-libzim) ## Installation ```sh pip install libzim ``` Our [PyPI wheels](https://pypi.org/project/libzim/) bundle a [recent release](https://download.openzim.org/release/libzim/) of the C++ libzim and are available for the following platforms: - macOS for `x86_64` and `arm64` - GNU/Linux for `x86_64`, `armhf` and `aarch64` - Linux+musl for `x86_64` and `aarch64` Wheels are available for both CPython and PyPy. Users on other platforms can install the source distribution (see [Building](#Building) below). ## Contributions ```sh git clone git@github.com:openzim/python-libzim.git && cd python-libzim # python -m venv env && source env/bin/activate pip install -U setuptools invoke invoke download-libzim install-dev build-ext test # invoke --list for available development helpers ``` See [CONTRIBUTING.md](./CONTRIBUTING.md) for additional details then [Open a ticket](https://github.com/openzim/python-libzim/issues/new) or submit a Pull Request on Github 🤗! ## Usage ### Read a ZIM file ```python from libzim.reader import Archive from libzim.search import Query, Searcher from libzim.suggestion import SuggestionSearcher zim = Archive("test.zim") print(f"Main entry is at {zim.main_entry.get_item().path}") entry = zim.get_entry_by_path("home/fr") print(f"Entry {entry.title} at {entry.path} is {entry.get_item().size}b.") print(bytes(entry.get_item().content).decode("UTF-8")) # searching using full-text index search_string = "Welcome" query = Query().set_query(search_string) searcher = Searcher(zim) search = searcher.search(query) search_count = search.getEstimatedMatches() print(f"there are {search_count} matches for {search_string}") print(list(search.getResults(0, search_count))) # accessing suggestions search_string = "kiwix" suggestion_searcher = SuggestionSearcher(zim) suggestion = suggestion_searcher.suggest(search_string) suggestion_count = suggestion.getEstimatedMatches() print(f"there are {suggestion_count} matches for {search_string}") print(list(suggestion.getResults(0, suggestion_count))) ``` ### Write a ZIM file ```py from libzim.writer import Creator, Item, StringProvider, FileProvider, Hint class MyItem(Item): def __init__(self, title, path, content = "", fpath = None): super().__init__() self.path = path self.title = title self.content = content self.fpath = fpath def get_path(self): return self.path def get_title(self): return self.title def get_mimetype(self): return "text/html" def get_contentprovider(self): if self.fpath is not None: return FileProvider(self.fpath) return StringProvider(self.content) def get_hints(self): return {Hint.FRONT_ARTICLE: True} content = """
Kiwix
""" item = MyItem("Hello Kiwix", "home", content) item2 = MyItem("Bonjour Kiwix", "home/fr", None, "home-fr.html") with Creator("test.zim").config_indexing(True, "eng") as creator: creator.set_mainpath("home") creator.add_item(item) creator.add_item(item2) for name, value in { "creator": "python-libzim", "description": "Created in python", "name": "my-zim", "publisher": "You", "title": "Test ZIM", }.items(): creator.add_metadata(name.title(), value) ``` ## Building `libzim` package building offers different behaviors via environment variables | Variable | Example | Use case | | -------------------------------- | ---------------------------------------- | -------- | | `LIBZIM_DL_VERSION` | `8.1.1` or `2023-04-14` | Specify the C++ libzim binary version to download and bundle. Either a release version string or a date, in which case it downloads a nightly | | `USE_SYSTEM_LIBZIM` | `1` | Uses `LDFLAG` and `CFLAGS` to find the libzim to link against. Resulting wheel won't bundle C++ libzim. | | `DONT_DOWNLOAD_LIBZIM` | `1` | Disable downloading of C++ libzim. Place headers in `include/` and libzim dylib/so in `libzim/` if no using system libzim. It will be bundled in wheel. | | `PROFILE` | `1` | Enable profile tracing in Cython extension. Required for Cython code coverage reporting. | | `SIGN_APPLE` | `1` | Set to sign and notarize the extension for macOS. Requires following informations | | `APPLE_SIGNING_IDENTITY` | `Developer ID Application: OrgName (ID)` | Required for signing on macOS | | `APPLE_SIGNING_KEYCHAIN_PATH` | `/tmp/build.keychain` | Path to the Keychain containing the certificate to sign for macOS with | | `APPLE_SIGNING_KEYCHAIN_PROFILE` | `build` | Name of the profile in the specified Keychain | ### Examples ##### Default: downloading and bundling most appropriate libzim release binary ```sh python3 -m build ``` #### Using system libzim (brew, debian or manually installed) - not bundled ```sh # using system-installed C++ libzim brew install libzim # macOS apt-get install libzim-devel # debian dnf install libzim-dev # fedora USE_SYSTEM_LIBZIM=1 python3 -m build --wheel # using a specific C++ libzim USE_SYSTEM_LIBZIM=1 \ CFLAGS="-I/usr/local/include" \ LDFLAGS="-L/usr/local/lib" DYLD_LIBRARY_PATH="/usr/local/lib" \ LD_LIBRARY_PATH="/usr/local/lib" \ python3 -m build --wheel ``` #### Other platforms On platforms for which there is no [official binary](https://download.openzim.org/release/libzim/) available, you'd have to [compile C++ libzim from source](https://github.com/openzim/libzim) first then either use `DONT_DOWNLOAD_LIBZIM` or `USE_SYSTEM_LIBZIM`. ## License [GPLv3](https://www.gnu.org/licenses/gpl-3.0) or later, see [LICENSE](LICENSE) for more details. %package -n python3-libzim Summary: A python-facing API for creating and interacting with ZIM files Provides: python-libzim BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-libzim # python-libzim `libzim` module allows you to read and write [ZIM files](https://openzim.org) in Python. It provides a shallow python interface on top of the [C++ `libzim` library](https://github.com/openzim/libzim). It is primarily used in [openZIM](https://github.com/openzim/) scrapers like [`sotoki`](https://github.com/openzim/sotoki) or [`youtube2zim`](https://github.com/openzim/youtube). [![Build Status](https://github.com/openzim/python-libzim/workflows/test/badge.svg?query=branch%3Amain)](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) [![CodeFactor](https://www.codefactor.io/repository/github/openzim/python-libzim/badge)](https://www.codefactor.io/repository/github/openzim/python-libzim) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![PyPI version shields.io](https://img.shields.io/pypi/v/libzim.svg)](https://pypi.org/project/libzim/) [![codecov](https://codecov.io/gh/openzim/python-libzim/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/python-libzim) ## Installation ```sh pip install libzim ``` Our [PyPI wheels](https://pypi.org/project/libzim/) bundle a [recent release](https://download.openzim.org/release/libzim/) of the C++ libzim and are available for the following platforms: - macOS for `x86_64` and `arm64` - GNU/Linux for `x86_64`, `armhf` and `aarch64` - Linux+musl for `x86_64` and `aarch64` Wheels are available for both CPython and PyPy. Users on other platforms can install the source distribution (see [Building](#Building) below). ## Contributions ```sh git clone git@github.com:openzim/python-libzim.git && cd python-libzim # python -m venv env && source env/bin/activate pip install -U setuptools invoke invoke download-libzim install-dev build-ext test # invoke --list for available development helpers ``` See [CONTRIBUTING.md](./CONTRIBUTING.md) for additional details then [Open a ticket](https://github.com/openzim/python-libzim/issues/new) or submit a Pull Request on Github 🤗! ## Usage ### Read a ZIM file ```python from libzim.reader import Archive from libzim.search import Query, Searcher from libzim.suggestion import SuggestionSearcher zim = Archive("test.zim") print(f"Main entry is at {zim.main_entry.get_item().path}") entry = zim.get_entry_by_path("home/fr") print(f"Entry {entry.title} at {entry.path} is {entry.get_item().size}b.") print(bytes(entry.get_item().content).decode("UTF-8")) # searching using full-text index search_string = "Welcome" query = Query().set_query(search_string) searcher = Searcher(zim) search = searcher.search(query) search_count = search.getEstimatedMatches() print(f"there are {search_count} matches for {search_string}") print(list(search.getResults(0, search_count))) # accessing suggestions search_string = "kiwix" suggestion_searcher = SuggestionSearcher(zim) suggestion = suggestion_searcher.suggest(search_string) suggestion_count = suggestion.getEstimatedMatches() print(f"there are {suggestion_count} matches for {search_string}") print(list(suggestion.getResults(0, suggestion_count))) ``` ### Write a ZIM file ```py from libzim.writer import Creator, Item, StringProvider, FileProvider, Hint class MyItem(Item): def __init__(self, title, path, content = "", fpath = None): super().__init__() self.path = path self.title = title self.content = content self.fpath = fpath def get_path(self): return self.path def get_title(self): return self.title def get_mimetype(self): return "text/html" def get_contentprovider(self): if self.fpath is not None: return FileProvider(self.fpath) return StringProvider(self.content) def get_hints(self): return {Hint.FRONT_ARTICLE: True} content = """Kiwix
""" item = MyItem("Hello Kiwix", "home", content) item2 = MyItem("Bonjour Kiwix", "home/fr", None, "home-fr.html") with Creator("test.zim").config_indexing(True, "eng") as creator: creator.set_mainpath("home") creator.add_item(item) creator.add_item(item2) for name, value in { "creator": "python-libzim", "description": "Created in python", "name": "my-zim", "publisher": "You", "title": "Test ZIM", }.items(): creator.add_metadata(name.title(), value) ``` ## Building `libzim` package building offers different behaviors via environment variables | Variable | Example | Use case | | -------------------------------- | ---------------------------------------- | -------- | | `LIBZIM_DL_VERSION` | `8.1.1` or `2023-04-14` | Specify the C++ libzim binary version to download and bundle. Either a release version string or a date, in which case it downloads a nightly | | `USE_SYSTEM_LIBZIM` | `1` | Uses `LDFLAG` and `CFLAGS` to find the libzim to link against. Resulting wheel won't bundle C++ libzim. | | `DONT_DOWNLOAD_LIBZIM` | `1` | Disable downloading of C++ libzim. Place headers in `include/` and libzim dylib/so in `libzim/` if no using system libzim. It will be bundled in wheel. | | `PROFILE` | `1` | Enable profile tracing in Cython extension. Required for Cython code coverage reporting. | | `SIGN_APPLE` | `1` | Set to sign and notarize the extension for macOS. Requires following informations | | `APPLE_SIGNING_IDENTITY` | `Developer ID Application: OrgName (ID)` | Required for signing on macOS | | `APPLE_SIGNING_KEYCHAIN_PATH` | `/tmp/build.keychain` | Path to the Keychain containing the certificate to sign for macOS with | | `APPLE_SIGNING_KEYCHAIN_PROFILE` | `build` | Name of the profile in the specified Keychain | ### Examples ##### Default: downloading and bundling most appropriate libzim release binary ```sh python3 -m build ``` #### Using system libzim (brew, debian or manually installed) - not bundled ```sh # using system-installed C++ libzim brew install libzim # macOS apt-get install libzim-devel # debian dnf install libzim-dev # fedora USE_SYSTEM_LIBZIM=1 python3 -m build --wheel # using a specific C++ libzim USE_SYSTEM_LIBZIM=1 \ CFLAGS="-I/usr/local/include" \ LDFLAGS="-L/usr/local/lib" DYLD_LIBRARY_PATH="/usr/local/lib" \ LD_LIBRARY_PATH="/usr/local/lib" \ python3 -m build --wheel ``` #### Other platforms On platforms for which there is no [official binary](https://download.openzim.org/release/libzim/) available, you'd have to [compile C++ libzim from source](https://github.com/openzim/libzim) first then either use `DONT_DOWNLOAD_LIBZIM` or `USE_SYSTEM_LIBZIM`. ## License [GPLv3](https://www.gnu.org/licenses/gpl-3.0) or later, see [LICENSE](LICENSE) for more details. %package help Summary: Development documents and examples for libzim Provides: python3-libzim-doc %description help # python-libzim `libzim` module allows you to read and write [ZIM files](https://openzim.org) in Python. It provides a shallow python interface on top of the [C++ `libzim` library](https://github.com/openzim/libzim). It is primarily used in [openZIM](https://github.com/openzim/) scrapers like [`sotoki`](https://github.com/openzim/sotoki) or [`youtube2zim`](https://github.com/openzim/youtube). [![Build Status](https://github.com/openzim/python-libzim/workflows/test/badge.svg?query=branch%3Amain)](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) [![CodeFactor](https://www.codefactor.io/repository/github/openzim/python-libzim/badge)](https://www.codefactor.io/repository/github/openzim/python-libzim) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![PyPI version shields.io](https://img.shields.io/pypi/v/libzim.svg)](https://pypi.org/project/libzim/) [![codecov](https://codecov.io/gh/openzim/python-libzim/branch/main/graph/badge.svg)](https://codecov.io/gh/openzim/python-libzim) ## Installation ```sh pip install libzim ``` Our [PyPI wheels](https://pypi.org/project/libzim/) bundle a [recent release](https://download.openzim.org/release/libzim/) of the C++ libzim and are available for the following platforms: - macOS for `x86_64` and `arm64` - GNU/Linux for `x86_64`, `armhf` and `aarch64` - Linux+musl for `x86_64` and `aarch64` Wheels are available for both CPython and PyPy. Users on other platforms can install the source distribution (see [Building](#Building) below). ## Contributions ```sh git clone git@github.com:openzim/python-libzim.git && cd python-libzim # python -m venv env && source env/bin/activate pip install -U setuptools invoke invoke download-libzim install-dev build-ext test # invoke --list for available development helpers ``` See [CONTRIBUTING.md](./CONTRIBUTING.md) for additional details then [Open a ticket](https://github.com/openzim/python-libzim/issues/new) or submit a Pull Request on Github 🤗! ## Usage ### Read a ZIM file ```python from libzim.reader import Archive from libzim.search import Query, Searcher from libzim.suggestion import SuggestionSearcher zim = Archive("test.zim") print(f"Main entry is at {zim.main_entry.get_item().path}") entry = zim.get_entry_by_path("home/fr") print(f"Entry {entry.title} at {entry.path} is {entry.get_item().size}b.") print(bytes(entry.get_item().content).decode("UTF-8")) # searching using full-text index search_string = "Welcome" query = Query().set_query(search_string) searcher = Searcher(zim) search = searcher.search(query) search_count = search.getEstimatedMatches() print(f"there are {search_count} matches for {search_string}") print(list(search.getResults(0, search_count))) # accessing suggestions search_string = "kiwix" suggestion_searcher = SuggestionSearcher(zim) suggestion = suggestion_searcher.suggest(search_string) suggestion_count = suggestion.getEstimatedMatches() print(f"there are {suggestion_count} matches for {search_string}") print(list(suggestion.getResults(0, suggestion_count))) ``` ### Write a ZIM file ```py from libzim.writer import Creator, Item, StringProvider, FileProvider, Hint class MyItem(Item): def __init__(self, title, path, content = "", fpath = None): super().__init__() self.path = path self.title = title self.content = content self.fpath = fpath def get_path(self): return self.path def get_title(self): return self.title def get_mimetype(self): return "text/html" def get_contentprovider(self): if self.fpath is not None: return FileProvider(self.fpath) return StringProvider(self.content) def get_hints(self): return {Hint.FRONT_ARTICLE: True} content = """Kiwix
""" item = MyItem("Hello Kiwix", "home", content) item2 = MyItem("Bonjour Kiwix", "home/fr", None, "home-fr.html") with Creator("test.zim").config_indexing(True, "eng") as creator: creator.set_mainpath("home") creator.add_item(item) creator.add_item(item2) for name, value in { "creator": "python-libzim", "description": "Created in python", "name": "my-zim", "publisher": "You", "title": "Test ZIM", }.items(): creator.add_metadata(name.title(), value) ``` ## Building `libzim` package building offers different behaviors via environment variables | Variable | Example | Use case | | -------------------------------- | ---------------------------------------- | -------- | | `LIBZIM_DL_VERSION` | `8.1.1` or `2023-04-14` | Specify the C++ libzim binary version to download and bundle. Either a release version string or a date, in which case it downloads a nightly | | `USE_SYSTEM_LIBZIM` | `1` | Uses `LDFLAG` and `CFLAGS` to find the libzim to link against. Resulting wheel won't bundle C++ libzim. | | `DONT_DOWNLOAD_LIBZIM` | `1` | Disable downloading of C++ libzim. Place headers in `include/` and libzim dylib/so in `libzim/` if no using system libzim. It will be bundled in wheel. | | `PROFILE` | `1` | Enable profile tracing in Cython extension. Required for Cython code coverage reporting. | | `SIGN_APPLE` | `1` | Set to sign and notarize the extension for macOS. Requires following informations | | `APPLE_SIGNING_IDENTITY` | `Developer ID Application: OrgName (ID)` | Required for signing on macOS | | `APPLE_SIGNING_KEYCHAIN_PATH` | `/tmp/build.keychain` | Path to the Keychain containing the certificate to sign for macOS with | | `APPLE_SIGNING_KEYCHAIN_PROFILE` | `build` | Name of the profile in the specified Keychain | ### Examples ##### Default: downloading and bundling most appropriate libzim release binary ```sh python3 -m build ``` #### Using system libzim (brew, debian or manually installed) - not bundled ```sh # using system-installed C++ libzim brew install libzim # macOS apt-get install libzim-devel # debian dnf install libzim-dev # fedora USE_SYSTEM_LIBZIM=1 python3 -m build --wheel # using a specific C++ libzim USE_SYSTEM_LIBZIM=1 \ CFLAGS="-I/usr/local/include" \ LDFLAGS="-L/usr/local/lib" DYLD_LIBRARY_PATH="/usr/local/lib" \ LD_LIBRARY_PATH="/usr/local/lib" \ python3 -m build --wheel ``` #### Other platforms On platforms for which there is no [official binary](https://download.openzim.org/release/libzim/) available, you'd have to [compile C++ libzim from source](https://github.com/openzim/libzim) first then either use `DONT_DOWNLOAD_LIBZIM` or `USE_SYSTEM_LIBZIM`. ## License [GPLv3](https://www.gnu.org/licenses/gpl-3.0) or later, see [LICENSE](LICENSE) for more details. %prep %autosetup -n libzim-3.1.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-libzim -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Thu May 18 2023 Python_Bot