diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:42:28 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-18 04:42:28 +0000 |
commit | acbdf4388b48fce01964e3538558ff0faeabf6ef (patch) | |
tree | 717f97207d26cd31bfd1cb3bfa7e40194cdd5cca /python-zipfile-deflate64.spec | |
parent | f48cef1e65a04a520c77ae58fab104f725e9c916 (diff) |
automatic import of python-zipfile-deflate64
Diffstat (limited to 'python-zipfile-deflate64.spec')
-rw-r--r-- | python-zipfile-deflate64.spec | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/python-zipfile-deflate64.spec b/python-zipfile-deflate64.spec new file mode 100644 index 0000000..30e64c4 --- /dev/null +++ b/python-zipfile-deflate64.spec @@ -0,0 +1,320 @@ +%global _empty_manifest_terminate_build 0 +Name: python-zipfile-deflate64 +Version: 0.2.0 +Release: 1 +Summary: Extract Deflate64 ZIP archives with Python's zipfile API. +License: Apache 2.0 +URL: https://github.com/brianhelba/zipfile-deflate64 +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/03/1b/f397f821b48156ee94c5ca7ad82dc5cdb73cbcbc4377b9c1b21556f3ce8c/zipfile-deflate64-0.2.0.tar.gz + + +%description +# zipfile-deflate64 +[](https://pypi.org/project/zipfile-deflate64/) + +Extract Deflate64 ZIP archives with Python's `zipfile` API. + +## Installation +```bash +pip install zipfile-deflate64 +``` + +Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported, +with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI. + +## Usage +Anywhere in a Python codebase: +```python +import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64 +``` + +Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience: +```python +import zipfile_deflate64 as zipfile + +zipfile.ZipFile(...) +... +``` + +## Design Rationale +### The Problem +Recent versions of Microsoft Windows Explorer +[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916). +With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large +ZIP files use Deflate64 compression. + +However, **support for Deflate64 in the open-source ecosystem is very poor**! +Most ZIP libraries have declined to implement Deflate64, +citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate). + +In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264). +In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors). + +The 7-Zip project probably provides the best general-purpose support for compressing and decompressing +Deflate64, but there are several obstacles to general usability: +* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application + * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats, + so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable. +* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64), + [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564). +* p7zip does not build an API for external software to invoke for decompression. +* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork, + which is packaged by Arch Linux, amongst others. + * This seems to be active, and now can be built with CMake, but there's no support for building an external API. +* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support + Deflate64. + +In the Python ecosystem in particular, there have been several unfulfilled requests ( +[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33) +[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/) +[[3]](https://stackoverflow.com/a/12809847) +) for Deflate64 decompression support. + +### A Solution +The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension +to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository +of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages. +Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for +the ZIP archive format (which is out of scope for zlib). + +infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for +initialization and some explicit memory management operations (resizing allocated buffers and proving a +Python-friendly `malloc`) to operate efficiently, so wrapping it with only +[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate. + +To manage ZIP archive extraction operations, the Python standard library +[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already +ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for +compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching +can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module +outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation +package. + + + + +%package -n python3-zipfile-deflate64 +Summary: Extract Deflate64 ZIP archives with Python's zipfile API. +Provides: python-zipfile-deflate64 +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-zipfile-deflate64 +# zipfile-deflate64 +[](https://pypi.org/project/zipfile-deflate64/) + +Extract Deflate64 ZIP archives with Python's `zipfile` API. + +## Installation +```bash +pip install zipfile-deflate64 +``` + +Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported, +with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI. + +## Usage +Anywhere in a Python codebase: +```python +import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64 +``` + +Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience: +```python +import zipfile_deflate64 as zipfile + +zipfile.ZipFile(...) +... +``` + +## Design Rationale +### The Problem +Recent versions of Microsoft Windows Explorer +[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916). +With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large +ZIP files use Deflate64 compression. + +However, **support for Deflate64 in the open-source ecosystem is very poor**! +Most ZIP libraries have declined to implement Deflate64, +citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate). + +In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264). +In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors). + +The 7-Zip project probably provides the best general-purpose support for compressing and decompressing +Deflate64, but there are several obstacles to general usability: +* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application + * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats, + so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable. +* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64), + [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564). +* p7zip does not build an API for external software to invoke for decompression. +* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork, + which is packaged by Arch Linux, amongst others. + * This seems to be active, and now can be built with CMake, but there's no support for building an external API. +* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support + Deflate64. + +In the Python ecosystem in particular, there have been several unfulfilled requests ( +[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33) +[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/) +[[3]](https://stackoverflow.com/a/12809847) +) for Deflate64 decompression support. + +### A Solution +The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension +to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository +of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages. +Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for +the ZIP archive format (which is out of scope for zlib). + +infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for +initialization and some explicit memory management operations (resizing allocated buffers and proving a +Python-friendly `malloc`) to operate efficiently, so wrapping it with only +[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate. + +To manage ZIP archive extraction operations, the Python standard library +[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already +ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for +compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching +can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module +outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation +package. + + + + +%package help +Summary: Development documents and examples for zipfile-deflate64 +Provides: python3-zipfile-deflate64-doc +%description help +# zipfile-deflate64 +[](https://pypi.org/project/zipfile-deflate64/) + +Extract Deflate64 ZIP archives with Python's `zipfile` API. + +## Installation +```bash +pip install zipfile-deflate64 +``` + +Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported, +with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI. + +## Usage +Anywhere in a Python codebase: +```python +import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64 +``` + +Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience: +```python +import zipfile_deflate64 as zipfile + +zipfile.ZipFile(...) +... +``` + +## Design Rationale +### The Problem +Recent versions of Microsoft Windows Explorer +[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916). +With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large +ZIP files use Deflate64 compression. + +However, **support for Deflate64 in the open-source ecosystem is very poor**! +Most ZIP libraries have declined to implement Deflate64, +citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate). + +In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264). +In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors). + +The 7-Zip project probably provides the best general-purpose support for compressing and decompressing +Deflate64, but there are several obstacles to general usability: +* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application + * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats, + so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable. +* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64), + [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564). +* p7zip does not build an API for external software to invoke for decompression. +* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork, + which is packaged by Arch Linux, amongst others. + * This seems to be active, and now can be built with CMake, but there's no support for building an external API. +* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support + Deflate64. + +In the Python ecosystem in particular, there have been several unfulfilled requests ( +[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33) +[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/) +[[3]](https://stackoverflow.com/a/12809847) +) for Deflate64 decompression support. + +### A Solution +The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension +to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository +of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages. +Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for +the ZIP archive format (which is out of scope for zlib). + +infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for +initialization and some explicit memory management operations (resizing allocated buffers and proving a +Python-friendly `malloc`) to operate efficiently, so wrapping it with only +[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate. + +To manage ZIP archive extraction operations, the Python standard library +[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already +ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for +compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching +can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module +outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation +package. + + + + +%prep +%autosetup -n zipfile-deflate64-0.2.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-zipfile-deflate64 -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.0-1 +- Package Spec generated |