Accepting request 744883 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/744883 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-brotlipy?expand=0&rev=5
This commit is contained in:
commit
63773bb3aa
126
merged_pr_94.patch
Normal file
126
merged_pr_94.patch
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
From bd202a98e44947aaed2345278955a86ca8f42f8c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Felix Yan <felixonmars@archlinux.org>
|
||||||
|
Date: Tue, 6 Jun 2017 19:16:36 +0800
|
||||||
|
Subject: [PATCH] Allow to build with shared brotli
|
||||||
|
|
||||||
|
It would be nice to allow building with shared brotli since we have one
|
||||||
|
in the repositories. This commit would not break the default
|
||||||
|
installation.
|
||||||
|
---
|
||||||
|
.travis.yml | 8 +++++-
|
||||||
|
setup.py | 67 ++++++++++++++++++++++++---------------------
|
||||||
|
src/brotli/build.py | 8 +++++-
|
||||||
|
3 files changed, 50 insertions(+), 33 deletions(-)
|
||||||
|
|
||||||
|
Index: brotlipy-0.7.0/setup.py
|
||||||
|
===================================================================
|
||||||
|
--- brotlipy-0.7.0.orig/setup.py
|
||||||
|
+++ brotlipy-0.7.0/setup.py
|
||||||
|
@@ -1,41 +1,15 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
+import os
|
||||||
|
from setuptools import find_packages, setup
|
||||||
|
|
||||||
|
long_description = (
|
||||||
|
open("README.rst").read() + '\n\n' + open("HISTORY.rst").read()
|
||||||
|
)
|
||||||
|
|
||||||
|
-
|
||||||
|
-setup(
|
||||||
|
- name="brotlipy",
|
||||||
|
- version="0.7.0",
|
||||||
|
-
|
||||||
|
- description="Python binding to the Brotli library",
|
||||||
|
- long_description=long_description,
|
||||||
|
- url="https://github.com/python-hyper/brotlipy/",
|
||||||
|
- license="MIT",
|
||||||
|
-
|
||||||
|
- author="Cory Benfield",
|
||||||
|
- author_email="cory@lukasa.co.uk",
|
||||||
|
-
|
||||||
|
- setup_requires=[
|
||||||
|
- "cffi>=1.0.0",
|
||||||
|
- ],
|
||||||
|
- install_requires=[
|
||||||
|
- "cffi>=1.0.0",
|
||||||
|
- ],
|
||||||
|
- extras_require={
|
||||||
|
- ':python_version == "2.7" or python_version == "3.3"': ['enum34>=1.0.4, <2'],
|
||||||
|
- },
|
||||||
|
-
|
||||||
|
- cffi_modules=["src/brotli/build.py:ffi"],
|
||||||
|
-
|
||||||
|
- packages=find_packages('src'),
|
||||||
|
- package_dir={'': 'src'},
|
||||||
|
-
|
||||||
|
- ext_package="brotli",
|
||||||
|
-
|
||||||
|
- libraries=[
|
||||||
|
+libraries = []
|
||||||
|
+USE_SHARED_BROTLI = os.environ.get("USE_SHARED_BROTLI")
|
||||||
|
+if USE_SHARED_BROTLI != "1":
|
||||||
|
+ libraries = [
|
||||||
|
("libbrotli", {
|
||||||
|
"include_dirs": [
|
||||||
|
"libbrotli/include",
|
||||||
|
@@ -67,7 +41,38 @@ setup(
|
||||||
|
'libbrotli/enc/entropy_encode.c'
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
+ ]
|
||||||
|
+
|
||||||
|
+setup(
|
||||||
|
+ name="brotlipy",
|
||||||
|
+ version="0.7.0",
|
||||||
|
+
|
||||||
|
+ description="Python binding to the Brotli library",
|
||||||
|
+ long_description=long_description,
|
||||||
|
+ url="https://github.com/python-hyper/brotlipy/",
|
||||||
|
+ license="MIT",
|
||||||
|
+
|
||||||
|
+ author="Cory Benfield",
|
||||||
|
+ author_email="cory@lukasa.co.uk",
|
||||||
|
+
|
||||||
|
+ setup_requires=[
|
||||||
|
+ "cffi>=1.0.0",
|
||||||
|
],
|
||||||
|
+ install_requires=[
|
||||||
|
+ "cffi>=1.0.0",
|
||||||
|
+ ],
|
||||||
|
+ extras_require={
|
||||||
|
+ ':python_version == "2.7" or python_version == "3.3"': ['enum34>=1.0.4, <2'],
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
+ cffi_modules=["src/brotli/build.py:ffi"],
|
||||||
|
+
|
||||||
|
+ packages=find_packages('src'),
|
||||||
|
+ package_dir={'': 'src'},
|
||||||
|
+
|
||||||
|
+ ext_package="brotli",
|
||||||
|
+
|
||||||
|
+ libraries=libraries,
|
||||||
|
|
||||||
|
zip_safe=False,
|
||||||
|
|
||||||
|
Index: brotlipy-0.7.0/src/brotli/build.py
|
||||||
|
===================================================================
|
||||||
|
--- brotlipy-0.7.0.orig/src/brotli/build.py
|
||||||
|
+++ brotlipy-0.7.0/src/brotli/build.py
|
||||||
|
@@ -1,10 +1,16 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
+import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from cffi import FFI
|
||||||
|
ffi = FFI()
|
||||||
|
|
||||||
|
-libraries = ['libbrotli']
|
||||||
|
+USE_SHARED_BROTLI = os.environ.get("USE_SHARED_BROTLI")
|
||||||
|
+if USE_SHARED_BROTLI != "1":
|
||||||
|
+ libraries = ['libbrotli']
|
||||||
|
+else:
|
||||||
|
+ libraries = ['brotlienc', 'brotlidec']
|
||||||
|
+
|
||||||
|
if 'win32' not in str(sys.platform).lower():
|
||||||
|
libraries.append('stdc++')
|
||||||
|
|
163
pr_154-brotli-v1.patch
Normal file
163
pr_154-brotli-v1.patch
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
commit b2c5c4a0216408a1f3c74246f2334ed35827a55d
|
||||||
|
Author: John Vandenberg <jayvdb@gmail.com>
|
||||||
|
Date: Fri Nov 1 18:31:50 2019 +0700
|
||||||
|
|
||||||
|
Update brotli to v1.0.7
|
||||||
|
|
||||||
|
Removes decommissioned custom dictionary functionality
|
||||||
|
which was removed from libbrotli.
|
||||||
|
|
||||||
|
Closes https://github.com/python-hyper/brotlipy/issues/129
|
||||||
|
|
||||||
|
diff --git a/src/brotli/brotli.py b/src/brotli/brotli.py
|
||||||
|
index a9cfa39..cc08000 100644
|
||||||
|
--- a/src/brotli/brotli.py
|
||||||
|
+++ b/src/brotli/brotli.py
|
||||||
|
@@ -95,8 +95,7 @@ def compress(data,
|
||||||
|
mode=DEFAULT_MODE,
|
||||||
|
quality=lib.BROTLI_DEFAULT_QUALITY,
|
||||||
|
lgwin=lib.BROTLI_DEFAULT_WINDOW,
|
||||||
|
- lgblock=0,
|
||||||
|
- dictionary=b''):
|
||||||
|
+ lgblock=0):
|
||||||
|
"""
|
||||||
|
Compress a string using Brotli.
|
||||||
|
|
||||||
|
@@ -142,7 +141,6 @@ def compress(data,
|
||||||
|
quality=quality,
|
||||||
|
lgwin=lgwin,
|
||||||
|
lgblock=lgblock,
|
||||||
|
- dictionary=dictionary
|
||||||
|
)
|
||||||
|
compressed_data = compressor._compress(data, lib.BROTLI_OPERATION_FINISH)
|
||||||
|
assert lib.BrotliEncoderIsFinished(compressor._encoder) == lib.BROTLI_TRUE
|
||||||
|
@@ -242,21 +240,13 @@ class Compressor(object):
|
||||||
|
range of this value is 16 to 24. If set to 0, the value will be set
|
||||||
|
based on ``quality``.
|
||||||
|
:type lgblock: ``int``
|
||||||
|
-
|
||||||
|
- :param dictionary: A pre-set dictionary for LZ77. Please use this with
|
||||||
|
- caution: if a dictionary is used for compression, the same dictionary
|
||||||
|
- **must** be used for decompression!
|
||||||
|
- :type dictionary: ``bytes``
|
||||||
|
"""
|
||||||
|
- _dictionary = None
|
||||||
|
- _dictionary_size = None
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
mode=DEFAULT_MODE,
|
||||||
|
quality=lib.BROTLI_DEFAULT_QUALITY,
|
||||||
|
lgwin=lib.BROTLI_DEFAULT_WINDOW,
|
||||||
|
- lgblock=0,
|
||||||
|
- dictionary=b''):
|
||||||
|
+ lgblock=0):
|
||||||
|
enc = lib.BrotliEncoderCreateInstance(
|
||||||
|
ffi.NULL, ffi.NULL, ffi.NULL
|
||||||
|
)
|
||||||
|
@@ -271,13 +261,6 @@ class Compressor(object):
|
||||||
|
_set_parameter(enc, lib.BROTLI_PARAM_LGWIN, "lgwin", lgwin)
|
||||||
|
_set_parameter(enc, lib.BROTLI_PARAM_LGBLOCK, "lgblock", lgblock)
|
||||||
|
|
||||||
|
- if dictionary:
|
||||||
|
- self._dictionary = ffi.new("uint8_t []", dictionary)
|
||||||
|
- self._dictionary_size = len(dictionary)
|
||||||
|
- lib.BrotliEncoderSetCustomDictionary(
|
||||||
|
- enc, self._dictionary_size, self._dictionary
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
self._encoder = enc
|
||||||
|
|
||||||
|
def _compress(self, data, operation):
|
||||||
|
@@ -358,31 +341,12 @@ class Decompressor(object):
|
||||||
|
"""
|
||||||
|
An object that allows for streaming decompression of Brotli-compressed
|
||||||
|
data.
|
||||||
|
-
|
||||||
|
- .. versionchanged:: 0.5.0
|
||||||
|
- Added ``dictionary`` parameter.
|
||||||
|
-
|
||||||
|
- :param dictionary: A pre-set dictionary for LZ77. Please use this with
|
||||||
|
- caution: if a dictionary is used for compression, the same dictionary
|
||||||
|
- **must** be used for decompression!
|
||||||
|
- :type dictionary: ``bytes``
|
||||||
|
"""
|
||||||
|
- _dictionary = None
|
||||||
|
- _dictionary_size = None
|
||||||
|
|
||||||
|
- def __init__(self, dictionary=b''):
|
||||||
|
+ def __init__(self):
|
||||||
|
dec = lib.BrotliDecoderCreateInstance(ffi.NULL, ffi.NULL, ffi.NULL)
|
||||||
|
self._decoder = ffi.gc(dec, lib.BrotliDecoderDestroyInstance)
|
||||||
|
|
||||||
|
- if dictionary:
|
||||||
|
- self._dictionary = ffi.new("uint8_t []", dictionary)
|
||||||
|
- self._dictionary_size = len(dictionary)
|
||||||
|
- lib.BrotliDecoderSetCustomDictionary(
|
||||||
|
- self._decoder,
|
||||||
|
- self._dictionary_size,
|
||||||
|
- self._dictionary
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
def decompress(self, data):
|
||||||
|
"""
|
||||||
|
Decompress part of a complete Brotli-compressed string.
|
||||||
|
diff --git a/src/brotli/build.py b/src/brotli/build.py
|
||||||
|
index 0e1bb80..f93d312 100644
|
||||||
|
--- a/src/brotli/build.py
|
||||||
|
+++ b/src/brotli/build.py
|
||||||
|
@@ -93,20 +93,6 @@ ffi.cdef("""
|
||||||
|
uint8_t** next_out,
|
||||||
|
size_t* total_out);
|
||||||
|
|
||||||
|
- /* Fills the new state with a dictionary for LZ77, warming up the
|
||||||
|
- ringbuffer, e.g. for custom static dictionaries for data formats.
|
||||||
|
- Not to be confused with the built-in transformable dictionary of Brotli.
|
||||||
|
- |size| should be less or equal to 2^24 (16MiB), otherwise the dictionary
|
||||||
|
- will be ignored. The dictionary must exist in memory until decoding is
|
||||||
|
- done and is owned by the caller. To use:
|
||||||
|
- 1) Allocate and initialize state with BrotliCreateInstance
|
||||||
|
- 2) Use BrotliSetCustomDictionary
|
||||||
|
- 3) Use BrotliDecompressStream
|
||||||
|
- 4) Clean up and free state with BrotliDestroyState
|
||||||
|
- */
|
||||||
|
- void BrotliDecoderSetCustomDictionary(
|
||||||
|
- BrotliDecoderState* s, size_t size, const uint8_t* dict);
|
||||||
|
-
|
||||||
|
/* Returns true, if decoder has some unconsumed output.
|
||||||
|
Otherwise returns false. */
|
||||||
|
BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s);
|
||||||
|
@@ -205,15 +191,6 @@ ffi.cdef("""
|
||||||
|
BrotliEncoderParameter p,
|
||||||
|
uint32_t value);
|
||||||
|
|
||||||
|
- /* Fills the new state with a dictionary for LZ77, warming up the
|
||||||
|
- ringbuffer, e.g. for custom static dictionaries for data formats.
|
||||||
|
- Not to be confused with the built-in transformable dictionary of Brotli.
|
||||||
|
- To decode, use BrotliSetCustomDictionary() of the decoder with the same
|
||||||
|
- dictionary. */
|
||||||
|
- void BrotliEncoderSetCustomDictionary(BrotliEncoderState* state,
|
||||||
|
- size_t size,
|
||||||
|
- const uint8_t* dict);
|
||||||
|
-
|
||||||
|
/* Check if encoder is in "finished" state, i.e. no more input is
|
||||||
|
acceptable and no more output will be produced.
|
||||||
|
Works only with BrotliEncoderCompressStream workflow.
|
||||||
|
diff --git a/test/test_simple_compression.py b/test/test_simple_compression.py
|
||||||
|
index b9921eb..e189f74 100644
|
||||||
|
--- a/test/test_simple_compression.py
|
||||||
|
+++ b/test/test_simple_compression.py
|
||||||
|
@@ -106,14 +106,6 @@ def test_compressed_data_roundtrips(s):
|
||||||
|
assert brotli.decompress(brotli.compress(s)) == s
|
||||||
|
|
||||||
|
|
||||||
|
-@given(binary(), binary())
|
||||||
|
-def test_compressed_data_with_dictionaries(s, dictionary):
|
||||||
|
- d = brotli.Decompressor(dictionary)
|
||||||
|
- compressed = brotli.compress(s, dictionary=dictionary)
|
||||||
|
- uncompressed = d.decompress(compressed)
|
||||||
|
- assert uncompressed == s
|
||||||
|
-
|
||||||
|
-
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"params",
|
||||||
|
[
|
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 1 11:37:53 UTC 2019 - John Vandenberg <jayvdb@gmail.com>
|
||||||
|
|
||||||
|
- Replace builtin libbrotli v0.6 with system libbrotli 1.x with patches:
|
||||||
|
- merged_pr_94.patch
|
||||||
|
- pr_154-brotli-v1.patch
|
||||||
|
- Remove build dependency stdc++
|
||||||
|
- Remove brotli/build.py from installed package
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Mar 22 12:49:36 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
Fri Mar 22 12:49:36 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
@ -28,13 +28,15 @@ Source0: https://pypi.io/packages/source/b/brotlipy/brotlipy-%{version}.t
|
|||||||
# Copy of https://github.com/google/brotli/tree/46c1a881b41bb638c76247558aa04b1591af3aa7/tests/testdata
|
# Copy of https://github.com/google/brotli/tree/46c1a881b41bb638c76247558aa04b1591af3aa7/tests/testdata
|
||||||
Source1: testdata.tgz
|
Source1: testdata.tgz
|
||||||
Source2: https://raw.githubusercontent.com/python-hyper/brotlipy/master/test/conftest.py
|
Source2: https://raw.githubusercontent.com/python-hyper/brotlipy/master/test/conftest.py
|
||||||
|
Patch0: merged_pr_94.patch
|
||||||
|
Patch1: pr_154-brotli-v1.patch
|
||||||
BuildRequires: %{python_module cffi >= 1.0.0}
|
BuildRequires: %{python_module cffi >= 1.0.0}
|
||||||
BuildRequires: %{python_module devel}
|
BuildRequires: %{python_module devel}
|
||||||
BuildRequires: %{python_module hypothesis}
|
BuildRequires: %{python_module hypothesis}
|
||||||
BuildRequires: %{python_module pytest}
|
BuildRequires: %{python_module pytest}
|
||||||
BuildRequires: %{python_module setuptools}
|
BuildRequires: %{python_module setuptools}
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: libbrotli-devel
|
||||||
BuildRequires: python-enum34
|
BuildRequires: python-enum34
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires: python-cffi >= 1.0.0
|
Requires: python-cffi >= 1.0.0
|
||||||
@ -51,7 +53,11 @@ directly from Python code.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n brotlipy-%{version}
|
%setup -q -n brotlipy-%{version}
|
||||||
mv libbrotli/LICENSE LICENSE.libbrotli
|
%autopatch -p1
|
||||||
|
# Remove unnecessary dependency on stdc++
|
||||||
|
# See https://github.com/python-hyper/brotlipy/pull/151
|
||||||
|
sed -i 's/libraries.append.*stdc++.*$/pass/' src/brotli/build.py
|
||||||
|
|
||||||
cp %{SOURCE2} test/
|
cp %{SOURCE2} test/
|
||||||
cd libbrotli
|
cd libbrotli
|
||||||
mkdir -p tests
|
mkdir -p tests
|
||||||
@ -60,21 +66,23 @@ tar -xzf %{SOURCE1}
|
|||||||
|
|
||||||
%build
|
%build
|
||||||
export CFLAGS="%{optflags}"
|
export CFLAGS="%{optflags}"
|
||||||
export CXXFLAGS="%{optflags}"
|
export USE_SHARED_BROTLI=1
|
||||||
%python_build
|
%python_build
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%python_install
|
%python_install
|
||||||
%python_expand %fdupes %{buildroot}%{$python_sitearch}
|
%{python_expand rm -f %{buildroot}%{$python_sitearch}/brotli/build.py* %{buildroot}%{$python_sitearch}/brotli/__pycache__/build.*
|
||||||
|
%fdupes %{buildroot}%{$python_sitearch}
|
||||||
|
}
|
||||||
|
|
||||||
%check
|
%check
|
||||||
# the skipped tests are benchmarks which can be flaky in OBS
|
# the skipped tests are benchmarks which can be flaky in OBS
|
||||||
%python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m pytest -k 'not (test_streaming_compression or test_streaming_compression_flush)'
|
%python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m pytest -k 'not (test_streaming_compression or test_streaming_compression_flush)'
|
||||||
|
|
||||||
%files %{python_files}
|
%files %{python_files}
|
||||||
%license LICENSE LICENSE.libbrotli
|
%license LICENSE
|
||||||
%doc README.rst
|
%doc README.rst
|
||||||
%{python_sitearch}/brotli
|
%{python_sitearch}/brotli
|
||||||
%{python_sitearch}/brotlipy-%{version}-py%{py_ver}.egg-info
|
%{python_sitearch}/brotlipy-%{version}-py*.egg-info
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
Loading…
Reference in New Issue
Block a user