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>
|
||||
|
||||
|
@ -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
|
||||
Source1: testdata.tgz
|
||||
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 devel}
|
||||
BuildRequires: %{python_module hypothesis}
|
||||
BuildRequires: %{python_module pytest}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libbrotli-devel
|
||||
BuildRequires: python-enum34
|
||||
BuildRequires: python-rpm-macros
|
||||
Requires: python-cffi >= 1.0.0
|
||||
@ -51,7 +53,11 @@ directly from Python code.
|
||||
|
||||
%prep
|
||||
%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/
|
||||
cd libbrotli
|
||||
mkdir -p tests
|
||||
@ -60,21 +66,23 @@ tar -xzf %{SOURCE1}
|
||||
|
||||
%build
|
||||
export CFLAGS="%{optflags}"
|
||||
export CXXFLAGS="%{optflags}"
|
||||
export USE_SHARED_BROTLI=1
|
||||
%python_build
|
||||
|
||||
%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
|
||||
# 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)'
|
||||
|
||||
%files %{python_files}
|
||||
%license LICENSE LICENSE.libbrotli
|
||||
%license LICENSE
|
||||
%doc README.rst
|
||||
%{python_sitearch}/brotli
|
||||
%{python_sitearch}/brotlipy-%{version}-py%{py_ver}.egg-info
|
||||
%{python_sitearch}/brotlipy-%{version}-py*.egg-info
|
||||
|
||||
%changelog
|
||||
|
Loading…
Reference in New Issue
Block a user