From bb73ee9c0ecf7eb1f51761c8aa63dd3cccbcf45face86af94b6afec8a16a62ea Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Sun, 16 Jan 2022 13:27:21 +0000 Subject: [PATCH] Accepting request 946677 from home:buschmann23:branches:devel:languages:python - Update to 2.0.0 * Bump hiredis from 0.13.3 to 1.0.0 and consequently add support for RESP3 (see #104) * Add type hints (see #106) * Drop support for EOL Python versions 2.7, 3.4, and 3.5 (see #103) - Drop obsolete patches * hiredis1.patch * bump_hiredis_0.14.1.patch - Update patches * 0001-Use-system-libhiredis.patch * drop-vendor-sources.patch OBS-URL: https://build.opensuse.org/request/show/946677 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-hiredis?expand=0&rev=14 --- 0001-Use-system-libhiredis.patch | 17 ++-- bump_hiredis_0.14.1.patch | 40 -------- drop-vendor-sources.patch | 10 +- hiredis-2.0.0.tar.gz | 3 + hiredis-py-1.1.0.tar.gz | 3 - hiredis1.patch | 154 ------------------------------- python-hiredis.changes | 15 +++ python-hiredis.spec | 13 +-- 8 files changed, 35 insertions(+), 220 deletions(-) delete mode 100644 bump_hiredis_0.14.1.patch create mode 100644 hiredis-2.0.0.tar.gz delete mode 100644 hiredis-py-1.1.0.tar.gz delete mode 100644 hiredis1.patch diff --git a/0001-Use-system-libhiredis.patch b/0001-Use-system-libhiredis.patch index 18ddbe6..da5d72f 100644 --- a/0001-Use-system-libhiredis.patch +++ b/0001-Use-system-libhiredis.patch @@ -6,21 +6,20 @@ Subject: Use system libhiredis Patch setup.py to not build hiredis in vendor/ Forwarded: no -Last-Updated: 2014-07-02 +Last-Updated: 2022-01-15 Patch-Name: 0001-Use-system-libhiredis.patch --- - setup.py | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) + setup.py 2022-01-15 16:17:07.715728053 +0100 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) ---- a/setup.py -+++ b/setup.py -@@ -13,7 +13,8 @@ def version(): +--- a/setup.py 2021-03-28 17:11:23.000000000 +0200 ++++ b/setup.py 2022-01-15 16:17:07.715728053 +0100 +@@ -13,7 +13,7 @@ def version(): ext = Extension("hiredis.hiredis", sources=sorted(glob.glob("src/*.c") + - ["vendor/hiredis/%s.c" % src for src in ("read", "sds")]), + ["vendor/hiredis/%s.c" % src for src in ("alloc", "read", "sds")]), - include_dirs=["vendor"]) -+ include_dirs=["vendor"], + extra_link_args=["-lhiredis"]) - + setup( name="hiredis", diff --git a/bump_hiredis_0.14.1.patch b/bump_hiredis_0.14.1.patch deleted file mode 100644 index 9ff48d7..0000000 --- a/bump_hiredis_0.14.1.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 638cd0d1909616afa44ce534cd5dd77f91edf295 Mon Sep 17 00:00:00 2001 -From: Guy Korland -Date: Wed, 18 Mar 2020 11:53:41 +0200 -Subject: [PATCH 1/3] upgrade hiredis to 0.14.1 - ---- - vendor/hiredis | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/src/reader.c -+++ b/src/reader.c -@@ -169,7 +169,7 @@ redisReplyObjectFunctions hiredis_Object - static void Reader_dealloc(hiredis_ReaderObject *self) { - // we don't need to free self->encoding as the buffer is managed by Python - // https://docs.python.org/3/c-api/arg.html#strings-and-buffers -- redisReplyReaderFree(self->reader); -+ redisReaderFree(self->reader); - Py_XDECREF(self->protocolErrorClass); - Py_XDECREF(self->replyErrorClass); - -@@ -293,7 +293,7 @@ static PyObject *Reader_feed(hiredis_Rea - goto error; - } - -- redisReplyReaderFeed(self->reader, (char *)buf.buf + off, len); -+ redisReaderFeed(self->reader, (char *)buf.buf + off, len); - PyBuffer_Release(&buf); - Py_RETURN_NONE; - -@@ -312,8 +312,8 @@ static PyObject *Reader_gets(hiredis_Rea - return NULL; - } - -- if (redisReplyReaderGetReply(self->reader, (void**)&obj) == REDIS_ERR) { -- errstr = redisReplyReaderGetError(self->reader); -+ if (redisReaderGetReply(self->reader, (void**)&obj) == REDIS_ERR) { -+ errstr = redisReaderGetError(self->reader); - /* protocolErrorClass might be a callable. call it, then use it's type */ - err = createError(self->protocolErrorClass, errstr, strlen(errstr)); - if (err != NULL) { diff --git a/drop-vendor-sources.patch b/drop-vendor-sources.patch index 80cdc6c..ff5ccba 100644 --- a/drop-vendor-sources.patch +++ b/drop-vendor-sources.patch @@ -1,16 +1,16 @@ --- - setup.py | 3 +-- +setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) ---- a/setup.py -+++ b/setup.py +--- a/setup.py 2022-01-15 16:32:39.379711369 +0100 ++++ b/setup.py 2022-01-15 16:33:03.091710944 +0100 @@ -11,8 +11,7 @@ def version(): return module.__version__ ext = Extension("hiredis.hiredis", - sources=sorted(glob.glob("src/*.c") + -- ["vendor/hiredis/%s.c" % src for src in ("read", "sds")]), +- ["vendor/hiredis/%s.c" % src for src in ("alloc", "read", "sds")]), + sources=sorted(glob.glob("src/*.c")), - include_dirs=["vendor"], extra_link_args=["-lhiredis"]) + setup( diff --git a/hiredis-2.0.0.tar.gz b/hiredis-2.0.0.tar.gz new file mode 100644 index 0000000..f2d122e --- /dev/null +++ b/hiredis-2.0.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81d6d8e39695f2c37954d1011c0480ef7cf444d4e3ae24bc5e89ee5de360139a +size 75807 diff --git a/hiredis-py-1.1.0.tar.gz b/hiredis-py-1.1.0.tar.gz deleted file mode 100644 index af715c6..0000000 --- a/hiredis-py-1.1.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1505a519bd704a806f4dead32610f8fc9390d1ac8051a29dae1b7146be65e611 -size 14471 diff --git a/hiredis1.patch b/hiredis1.patch deleted file mode 100644 index 87bf0e6..0000000 --- a/hiredis1.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 9084152f624e8e593b4e86ddf8bd13329fdfc043 Mon Sep 17 00:00:00 2001 -From: Illia Volochii -Date: Mon, 1 Mar 2021 20:48:33 +0200 -Subject: [PATCH] Bump hiredis from 0.13.3 to 1.0.0 - ---- - src/reader.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++----- - test/reader.py | 36 ++++++++++++++++++++++++++++++++++++ - 2 files changed, 87 insertions(+), 5 deletions(-) - ---- a/src/reader.c -+++ b/src/reader.c -@@ -69,8 +69,26 @@ static void *tryParentize(const redisRea - PyObject *parent; - if (task && task->parent) { - parent = (PyObject*)task->parent->obj; -- assert(PyList_CheckExact(parent)); -- PyList_SET_ITEM(parent, task->idx, obj); -+ switch (task->parent->type) { -+ case REDIS_REPLY_MAP: -+ if (task->idx % 2 == 0) { -+ /* Set a temporary item to save the object as a key. */ -+ PyDict_SetItem(parent, obj, Py_None); -+ } else { -+ /* Pop the temporary item and set proper key and value. */ -+ PyObject *last_item = PyObject_CallMethod(parent, "popitem", NULL); -+ PyObject *last_key = PyTuple_GetItem(last_item, 0); -+ PyDict_SetItem(parent, last_key, obj); -+ } -+ break; -+ case REDIS_REPLY_SET: -+ assert(PyAnySet_CheckExact(parent)); -+ PySet_Add(parent, obj); -+ break; -+ default: -+ assert(PyList_CheckExact(parent)); -+ PyList_SET_ITEM(parent, task->idx, obj); -+ } - } - return obj; - } -@@ -131,14 +149,28 @@ static void *createStringObject(const re - Py_INCREF(obj); - } - } else { -+ if (task->type == REDIS_REPLY_VERB) { -+ /* Skip 4 bytes of verbatim type header. */ -+ memmove(str, str+4, len); -+ len -= 4; -+ } - obj = createDecodedString(self, str, len); - } - return tryParentize(task, obj); - } - --static void *createArrayObject(const redisReadTask *task, int elements) { -+static void *createArrayObject(const redisReadTask *task, size_t elements) { - PyObject *obj; -- obj = PyList_New(elements); -+ switch (task->type) { -+ case REDIS_REPLY_MAP: -+ obj = PyDict_New(); -+ break; -+ case REDIS_REPLY_SET: -+ obj = PySet_New(NULL); -+ break; -+ default: -+ obj = PyList_New(elements); -+ } - return tryParentize(task, obj); - } - -@@ -148,21 +180,35 @@ static void *createIntegerObject(const r - return tryParentize(task, obj); - } - -+static void *createDoubleObject(const redisReadTask *task, double value, char *str, size_t le) { -+ PyObject *obj; -+ obj = PyFloat_FromDouble(value); -+ return tryParentize(task, obj); -+} -+ - static void *createNilObject(const redisReadTask *task) { - PyObject *obj = Py_None; - Py_INCREF(obj); - return tryParentize(task, obj); - } - -+static void *createBoolObject(const redisReadTask *task, int bval) { -+ PyObject *obj; -+ obj = PyBool_FromLong((long)bval); -+ return tryParentize(task, obj); -+} -+ - static void freeObject(void *obj) { - Py_XDECREF(obj); - } - - redisReplyObjectFunctions hiredis_ObjectFunctions = { - createStringObject, // void *(*createString)(const redisReadTask*, char*, size_t); -- createArrayObject, // void *(*createArray)(const redisReadTask*, int); -+ createArrayObject, // void *(*createArray)(const redisReadTask*, size_t); - createIntegerObject, // void *(*createInteger)(const redisReadTask*, long long); -+ createDoubleObject, // void *(*createDoubleObject)(const redisReadTask*, double, char*, size_t); - createNilObject, // void *(*createNil)(const redisReadTask*); -+ createBoolObject, // void *(*createBoolObject)(const redisReadTask*, int); - freeObject // void (*freeObject)(void*); - }; - ---- a/test/reader.py -+++ b/test/reader.py -@@ -118,6 +118,42 @@ class ReaderTest(TestCase): - self.reader.feed((":%d\r\n" % value).encode("ascii")) - self.assertEquals(value, self.reply()) - -+ def test_float(self): -+ value = -99.99 -+ self.reader.feed(b",%f\r\n" % value) -+ self.assertEqual(value, self.reply()) -+ -+ def test_boolean_true(self): -+ self.reader.feed(b"#t\r\n") -+ self.assertTrue(self.reply()) -+ -+ def test_boolean_false(self): -+ self.reader.feed(b"#f\r\n") -+ self.assertFalse(False, self.reply()) -+ -+ def test_none(self): -+ self.reader.feed(b"_\r\n") -+ self.assertIsNone(self.reply()) -+ -+ def test_set(self): -+ self.reader.feed(b"~3\r\n+tangerine\r\n_\r\n,10.5\r\n") -+ self.assertEqual({b"tangerine", None, 10.5}, self.reply()) -+ -+ def test_dict(self): -+ self.reader.feed(b"%2\r\n+radius\r\n,4.5\r\n+diameter\r\n:9\r\n") -+ self.assertEqual({b"radius": 4.5, b"diameter": 9}, self.reply()) -+ -+ def test_vector(self): -+ self.reader.feed(b">4\r\n+pubsub\r\n+message\r\n+channel\r\n+message\r\n") -+ self.assertEqual( -+ [b"pubsub", b"message", b"channel", b"message"], self.reply() -+ ) -+ -+ def test_verbatim_string(self): -+ value = b"text" -+ self.reader.feed(b"=8\r\ntxt:%s\r\n" % value) -+ self.assertEqual(value, self.reply()) -+ - def test_status_string(self): - self.reader.feed(b"+ok\r\n") - self.assertEquals(b"ok", self.reply()) diff --git a/python-hiredis.changes b/python-hiredis.changes index 0e4fd10..08ee2c2 100644 --- a/python-hiredis.changes +++ b/python-hiredis.changes @@ -1,3 +1,18 @@ +------------------------------------------------------------------- +Sat Jan 15 15:37:17 UTC 2022 - Matthias Fehring + +- Update to 2.0.0 + * Bump hiredis from 0.13.3 to 1.0.0 and consequently add support + for RESP3 (see #104) + * Add type hints (see #106) + * Drop support for EOL Python versions 2.7, 3.4, and 3.5 (see #103) +- Drop obsolete patches + * hiredis1.patch + * bump_hiredis_0.14.1.patch +- Update patches + * 0001-Use-system-libhiredis.patch + * drop-vendor-sources.patch + ------------------------------------------------------------------- Mon Feb 1 09:48:43 UTC 2021 - Markéta Machová diff --git a/python-hiredis.spec b/python-hiredis.spec index 360050f..25e8dc1 100644 --- a/python-hiredis.spec +++ b/python-hiredis.spec @@ -1,7 +1,7 @@ # # spec file for package python-hiredis # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,22 +17,17 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} -%define modname hiredis-py Name: python-hiredis -Version: 1.1.0 +Version: 2.0.0 Release: 0 Summary: Python wrapper for hiredis License: BSD-3-Clause URL: https://github.com/redis/hiredis-py -Source: https://github.com/redis/%{modname}/archive/v%{version}.tar.gz#/%{modname}-%{version}.tar.gz +Source: https://files.pythonhosted.org/packages/source/h/hiredis/hiredis-%{version}.tar.gz Patch0: 0001-Use-system-libhiredis.patch # PATCH-FIX-UPSTREAM drop-vendor-sources.patch gh#redis/hiredis-py#90 mcepl@suse.com # Allow to use platform hiredis libs on build Patch2: drop-vendor-sources.patch -# PATCH-FIX-UPSTREAM bump_hiredis_0.14.1.patch gh#redis/hiredis-py#95 mcepl@suse.com -# Use more recent version of hiredis. -Patch3: bump_hiredis_0.14.1.patch -Patch4: hiredis1.patch BuildRequires: %{python_module devel} BuildRequires: %{python_module setuptools} BuildRequires: fdupes @@ -44,7 +39,7 @@ BuildRequires: python-rpm-macros Python wrapper for hiredis C connector. %prep -%setup -q -n hiredis-py-%{version} +%setup -q -n hiredis-%{version} %autopatch -p1 %build