diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:24:15 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:24:15 +0000 |
| commit | 419b15fc37450d2dad16ddd6011de7486e824f98 (patch) | |
| tree | 662f19c27f4de2c5c5510681c03a73d0901b1e5b /python-libzim.spec | |
| parent | e85a6f5b4bddf8b01c60faca179a26819d36cec3 (diff) | |
automatic import of python-libzim
Diffstat (limited to 'python-libzim.spec')
| -rw-r--r-- | python-libzim.spec | 609 |
1 files changed, 609 insertions, 0 deletions
diff --git a/python-libzim.spec b/python-libzim.spec new file mode 100644 index 0000000..4d4e6b1 --- /dev/null +++ b/python-libzim.spec @@ -0,0 +1,609 @@ +%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). + +[](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) +[](https://www.codefactor.io/repository/github/openzim/python-libzim) +[](https://www.gnu.org/licenses/gpl-3.0) +[](https://pypi.org/project/libzim/) +[](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 = """<html><head><meta charset="UTF-8"><title>Web Page Title</title></head> +<body><h1>Welcome to this ZIM</h1><p>Kiwix</p></body></html>""" + +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). + +[](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) +[](https://www.codefactor.io/repository/github/openzim/python-libzim) +[](https://www.gnu.org/licenses/gpl-3.0) +[](https://pypi.org/project/libzim/) +[](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 = """<html><head><meta charset="UTF-8"><title>Web Page Title</title></head> +<body><h1>Welcome to this ZIM</h1><p>Kiwix</p></body></html>""" + +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). + +[](https://github.com/openzim/python-libzim/actions?query=branch%3Amain) +[](https://www.codefactor.io/repository/github/openzim/python-libzim) +[](https://www.gnu.org/licenses/gpl-3.0) +[](https://pypi.org/project/libzim/) +[](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 = """<html><head><meta charset="UTF-8"><title>Web Page Title</title></head> +<body><h1>Welcome to this ZIM</h1><p>Kiwix</p></body></html>""" + +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 <Python_Bot@openeuler.org> - 3.1.0-1 +- Package Spec generated |
