~ruther/guix-local

20fa738123d005bb543a09974c5c981917d10264 — Maxim Cournoyer 3 years ago 9956638
gnu: python-hiredis: Update to 2.2.2 and enable tests.

* gnu/packages/databases.scm (python-hiredis): Update to 2.2.2.
[source]: Fetch via git and apply patches.
[build-system]: Use pyproject-build-system.
[arguments]: Enable tests.  Add #:phases.
[native-inputs]: New field.
[inputs]: Likewise.
* gnu/packages/patches/python-hiredis-fix-header.patch: New file.
* gnu/packages/patches/python-hiredis-use-system-hiredis.patch: Likewise.
* gnu/local.mk (dist_patch_DATA): Register them.
M gnu/local.mk => gnu/local.mk +2 -0
@@ 1738,6 1738,8 @@ dist_patch_DATA =						\
  %D%/packages/patches/python-docopt-pytest6-compat.patch	\
  %D%/packages/patches/python-execnet-read-only-fix.patch	\
  %D%/packages/patches/python-fixtures-remove-monkeypatch-test.patch	\
  %D%/packages/patches/python-hiredis-fix-header.patch		\
  %D%/packages/patches/python-hiredis-use-system-hiredis.patch	\
  %D%/packages/patches/python-ipython-documentation-chars.patch	\
  %D%/packages/patches/python-ipython-documentation-repro.patch	\
  %D%/packages/patches/python-keras-integration-test.patch	\

M gnu/packages/databases.scm => gnu/packages/databases.scm +22 -11
@@ 3904,18 3904,29 @@ for Python.  The design goals are:
(define-public python-hiredis
  (package
    (name "python-hiredis")
    (version "0.2.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "hiredis" version))
       (sha256
        (base32
         "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
    (build-system python-build-system)
    (version "2.2.2")
    (source (origin
              (method git-fetch)        ;for tests
              (uri (git-reference
                    (url "https://github.com/redis/hiredis-py")
                    (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "066rm5m7aa8skm0a57cf45153bwmbl9yyi4s60an14hb25n947gi"))
              (patches
               (search-patches "python-hiredis-fix-header.patch"
                               "python-hiredis-use-system-hiredis.patch"))))
    (build-system pyproject-build-system)
    (arguments
     ;; no tests
     `(#:tests? #f))
     (list #:phases #~(modify-phases %standard-phases
                        (add-before 'check 'delete-extraneous-__init__.py
                          (lambda _
                            ;; The fix was forwarded upstream, see:
                            ;; https://github.com/redis/hiredis-py/pull/160.
                            (delete-file "tests/__init__.py"))))))
    (native-inputs (list python-pytest))
    (inputs (list hiredis))
    (home-page "https://github.com/redis/hiredis-py")
    (synopsis "Python extension that wraps protocol parsing code in hiredis")
    (description "Python-hiredis is a python extension that wraps protocol

A gnu/packages/patches/python-hiredis-fix-header.patch => gnu/packages/patches/python-hiredis-fix-header.patch +49 -0
@@ 0,0 1,49 @@
Upstream status: https://github.com/redis/hiredis-py/pull/159

From c2a20695aae53de7b5160e29675344df0b805fa6 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sat, 18 Mar 2023 15:18:08 -0400
Subject: [PATCH] pack: Replace sdsalloc.h with alloc.h

Fixes #158.

* src/pack.c: Replace sdsalloc.h with alloc.h.
(pack_command): Replace s_malloc with hi_malloc.
---
 src/pack.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/pack.c b/src/pack.c
index 443e9d3..23e4004 100644
--- a/src/pack.c
+++ b/src/pack.c
@@ -16,7 +16,7 @@ extern sds sdscpylen(sds s, const char *t, size_t len);
 extern sds sdsnewlen(const void *init, size_t initlen);
 #endif
 
-#include <hiredis/sdsalloc.h>
+#include <hiredis/alloc.h>
 
 PyObject *
 pack_command(PyObject *cmd)
@@ -32,7 +32,7 @@ pack_command(PyObject *cmd)
     }
 
     Py_ssize_t tokens_number = PyTuple_Size(cmd);
-    sds *tokens = s_malloc(sizeof(sds) * tokens_number);
+    sds *tokens = hi_malloc(sizeof(sds) * tokens_number);
     if (tokens == NULL)
     {
         return PyErr_NoMemory();
@@ -118,4 +118,4 @@ cleanup:
     sdsfreesplitres(tokens, tokens_number);
     hi_free(lengths);
     return result;
-}
\ No newline at end of file
+}

base-commit: 8adb1b3cb38b82cdc73fa2d72879712da1f74e70
-- 
2.39.1


A gnu/packages/patches/python-hiredis-use-system-hiredis.patch => gnu/packages/patches/python-hiredis-use-system-hiredis.patch +82 -0
@@ 0,0 1,82 @@
Upstream status: https://github.com/redis/hiredis-py/pull/161

From 7b3c8a364f6167f4b1828dd9c48ada3d8b0786f6 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Sat, 18 Mar 2023 21:32:21 -0400
Subject: [PATCH] setup.py: Fallback to use the system hiredis library.

Fixes #158 fully, including using a system-prodived hiredis.

When the hiredis git submodule hasn't been initialized, print a
message about it, and attempt to link against the a system-provided
hiredis library instead.

* setup.py (is_hiredis_bundled): New procedure.
(get_hiredis_bundled_sources): Likewise.  Print a message when
bundled_hiredis_sources is empty.
(get_sources): Adjust to use the above procedure.
(get_linker_args): Add -lhiredis when the bundled hiredis is not used.
---
 setup.py | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/setup.py b/setup.py
index 905df59..a77aca3 100644
--- a/setup.py
+++ b/setup.py
@@ -7,6 +7,7 @@ except ImportError:
 import importlib
 import glob
 import io
+import os
 import sys
 
 
@@ -17,16 +18,39 @@ def version():
     return module.__version__
 
 
+def is_hiredis_bundled():
+    hiredis_submodule = 'vendor/hiredis'
+    if (os.path.exists(hiredis_submodule)
+            and not os.path.isfile(hiredis_submodule)):
+        return not os.listdir()
+    return False
+
+
+def get_hiredis_bundled_sources():
+    hiredis_sources = ("alloc", "async", "hiredis", "net", "read",
+                       "sds", "sockcompat")
+    if is_hiredis_bundled():
+        return ["vendor/hiredis/%s.c" % src for src in hiredis_sources]
+    return []
+
+
+if not is_hiredis_bundled():
+    print('the bundled hiredis sources were not found;'
+          ' system hiredis will be used\n'
+          'to use the bundled hiredis sources instead,'
+          ' run "git submodule update --init"')
+
+
 def get_sources():
-    hiredis_sources = ("alloc", "async", "hiredis", "net", "read", "sds", "sockcompat")
-    return sorted(glob.glob("src/*.c") + ["vendor/hiredis/%s.c" % src for src in hiredis_sources])
+    return sorted(glob.glob("src/*.c") + get_hiredis_bundled_sources())
 
 
 def get_linker_args():
     if 'win32' in sys.platform or 'darwin' in sys.platform:
         return []
     else:
-        return ["-Wl,-Bsymbolic", ]
+        return ["-Wl,-Bsymbolic", ] + \
+            ['-lhiredis'] if not is_hiredis_bundled() else []
 
 
 def get_compiler_args():

base-commit: 8adb1b3cb38b82cdc73fa2d72879712da1f74e70
-- 
2.39.1