guix_mirror_bot pushed a commit to branch master
in repository guix.

commit b0d7a62276777b913331ea056bef5ad5ba1e0496
Author: Sergio Pastor Pérez <[email protected]>
AuthorDate: Mon Mar 23 10:21:08 2026 +0100

    gnu: python-zulip: Adjust package to include integration scripts.
    
    * gnu/local.mk: Add `python-zulip' patch to adjust scripts.
    
    * gnu/packages/messaging.scm (python-zulip): Patch package to include
    integration scripts.
    
    * gnu/packages/patches/python-zulip-make-irc-mirror-installable.patch: New
    file. Patch for `python-zulip' package. It makes the IRC mirror integration
    script installable.
    
    * gnu/packages/patches/python-zulip-fix-irc-mirror-timeout.patch: New
    file. Patch for `python-zulip' package. It fixes the IRC mirror integration
    timing out when relaying IRC messages.
    
    Change-Id: I562687943a6ce7a186cfb7150779ba6964981437
    Signed-off-by: Ludovic Courtès <[email protected]>
---
 gnu/local.mk                                       |  2 +
 gnu/packages/messaging.scm                         | 12 +++-
 .../python-zulip-fix-irc-mirror-timeout.patch      | 50 +++++++++++++++
 .../python-zulip-make-irc-mirror-installable.patch | 73 ++++++++++++++++++++++
 4 files changed, 134 insertions(+), 3 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 259ffe9ee2..e6ad5d9094 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2169,6 +2169,8 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/python-zeroc-ice-3.6.5-python-3.11-support.patch        
\
   %D%/packages/patches/python-zeroc-ice-3.6.5-python-3.12-support.patch        
\
   %D%/packages/patches/python-zipfile2-python-3.12-support.patch       \
+  %D%/packages/patches/python-zulip-fix-irc-mirror-timeout.patch       \
+  %D%/packages/patches/python-zulip-make-irc-mirror-installable.patch  \
   %D%/packages/patches/qcodeeditor-qt6.patch                   \
   %D%/packages/patches/qtdeclarative-5-disable-qmlcache.patch  \
   %D%/packages/patches/qtdeclarative-disable-qmlcache.patch    \
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 71dabbc9dd..0287ea5219 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -3197,7 +3197,10 @@ utilities.")
               (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1dy99ma8iqycl5j52zsahlwrgps96sschnn8jqm7pqmy2rz8ijlr"))))
+        (base32 "1dy99ma8iqycl5j52zsahlwrgps96sschnn8jqm7pqmy2rz8ijlr"))
+       (patches (search-patches
+                 "python-zulip-fix-irc-mirror-timeout.patch"
+                 "python-zulip-make-irc-mirror-installable.patch"))))
     (build-system pyproject-build-system)
     (arguments
      (list
@@ -3238,7 +3241,7 @@ utilities.")
            python-google-api-client
            python-google-auth-httplib2
            python-google-auth-oauthlib
-           ;; python-irc
+           python-irc
            ;; python-litellm
            python-matrix-nio
            ;; python-mercurial
@@ -3279,7 +3282,10 @@ share/zulip/integrations or in 
lib/<...>/site-packages/integrations:
 @item trello
 @item twitter
 @item zephyr
-@end itemize")
+@end itemize
+
+The package provides `zulip-irc-bridge' and `zulip-matrix-bridge' as
+standalone scripts.")
     (license license:asl2.0)))
 
 (define-public python-zulip-bots
diff --git a/gnu/packages/patches/python-zulip-fix-irc-mirror-timeout.patch 
b/gnu/packages/patches/python-zulip-fix-irc-mirror-timeout.patch
new file mode 100644
index 0000000000..f681e63505
--- /dev/null
+++ b/gnu/packages/patches/python-zulip-fix-irc-mirror-timeout.patch
@@ -0,0 +1,50 @@
+From 1697feef17dff0d5fc873c5271c74bbde5d8af60 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sergio=20Pastor=20P=C3=A9rez?=
+ <[email protected]>
+Date: Sun, 24 May 2026 18:03:26 +0200
+Subject: [PATCH 1/2] integrations: Fix IRC mirror timing out when relaying IRC
+ messages.
+
+* zulip/integrations/bridge_with_irc/irc_mirror_backend.py (fresh_session): New
+procedure. Ensure forked processes have a clean client to ensure they don't
+share the SSL sockets of the parent.
+
+This patch won't be needed once the following issue is merged upstream:
+https://github.com/zulip/python-zulip-api/pull/917
+---
+ .../bridge_with_irc/irc_mirror_backend.py            | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/zulip/integrations/bridge_with_irc/irc_mirror_backend.py 
b/zulip/integrations/bridge_with_irc/irc_mirror_backend.py
+index 8fdd6c98..e9ba1009 100644
+--- a/zulip/integrations/bridge_with_irc/irc_mirror_backend.py
++++ b/zulip/integrations/bridge_with_irc/irc_mirror_backend.py
+@@ -5,6 +5,7 @@ from typing import Any, Dict, Optional
+ 
+ import irc.bot
+ import irc.strings
++import requests
+ from irc.client import Event, ServerConnection, ip_numstr_to_quad
+ 
+ 
+@@ -89,7 +90,16 @@ class IRCBot(irc.bot.SingleServerIRCBot):
+             for line in msg["content"].split("\n"):
+                 send(line)
+ 
+-        z2i = mp.Process(target=self.zulip_client.call_on_each_message, 
args=(forward_to_irc,))
++        def fresh_session() -> None:
++            # Create a new client so the child doesn't share the parent's SSL
++            # sockets after forking in 'mp.Process'.
++            self.zulip_client.session.close()
++            new_session = requests.Session()
++            new_session.auth = (self.zulip_client.email, 
self.zulip_client.api_key)
++            self.zulip_client.session = new_session
++            self.zulip_client.call_on_each_message(forward_to_irc)
++
++        z2i = mp.Process(target=fresh_session)
+         z2i.start()
+ 
+     def on_privmsg(self, c: ServerConnection, e: Event) -> None:
+-- 
+2.54.0
+
diff --git 
a/gnu/packages/patches/python-zulip-make-irc-mirror-installable.patch 
b/gnu/packages/patches/python-zulip-make-irc-mirror-installable.patch
new file mode 100644
index 0000000000..7da0e18305
--- /dev/null
+++ b/gnu/packages/patches/python-zulip-make-irc-mirror-installable.patch
@@ -0,0 +1,73 @@
+From 537c09d25e652acfdb305159134a5e0585a0f21d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sergio=20Pastor=20P=C3=A9rez?=
+ <[email protected]>
+Date: Fri, 22 May 2026 10:56:48 +0200
+Subject: [PATCH 2/2] build: make IRC mirror integration script installable.
+
+This change was originally proposed by Sharlatan Hellseher:
+https://codeberg.org/guix/guix/pulls/7418#issuecomment-12239616
+
+* zulip/integrations/bridge_with_irc/irc-mirror.py: Rename file to
+'irc_mirror.py' to make it importable as a Python module.
+
+* zulip/integrations/bridge_with_irc/irc_mirror.py: Introduce `main' entry 
point
+so it can be used as a setuptools console script entry point.
+
+* zulip/setup.py: Register 'zulip-irc-bridge' as a console script so it's
+installed as part of the package output.
+
+This patch won't be needed once the following issue is merged upstream:
+https://github.com/zulip/python-zulip-api/pull/917
+---
+ .../bridge_with_irc/{irc-mirror.py => irc_mirror.py}       | 7 +++++--
+ zulip/setup.py                                             | 1 +
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+ rename zulip/integrations/bridge_with_irc/{irc-mirror.py => irc_mirror.py} 
(96%)
+
+diff --git a/zulip/integrations/bridge_with_irc/irc-mirror.py 
b/zulip/integrations/bridge_with_irc/irc_mirror.py
+similarity index 96%
+rename from zulip/integrations/bridge_with_irc/irc-mirror.py
+rename to zulip/integrations/bridge_with_irc/irc_mirror.py
+index 7aaca7b9..b0d3ff65 100755
+--- a/zulip/integrations/bridge_with_irc/irc-mirror.py
++++ b/zulip/integrations/bridge_with_irc/irc_mirror.py
+@@ -27,7 +27,7 @@ Specify your Zulip API credentials and server in a 
~/.zuliprc file or using the
+ Note that "_zulip" will be automatically appended to the IRC nick provided
+ """
+ 
+-if __name__ == "__main__":
++def main():
+     parser = zulip.add_default_arguments(
+         argparse.ArgumentParser(usage=usage), allow_provisioning=True
+     )
+@@ -45,7 +45,7 @@ if __name__ == "__main__":
+     options.client = "irc_mirror"
+     zulip_client = zulip.init_from_options(options)
+     try:
+-        from irc_mirror_backend import IRCBot
++        from .irc_mirror_backend import IRCBot
+     except ImportError:
+         traceback.print_exc()
+         print(
+@@ -70,3 +70,6 @@ if __name__ == "__main__":
+         sasl_password=options.sasl_password,
+     )
+     bot.start()
++
++if __name__ == "__main__":
++    main()
+diff --git a/zulip/setup.py b/zulip/setup.py
+index 097bc684..236e5d74 100755
+--- a/zulip/setup.py
++++ b/zulip/setup.py
+@@ -60,6 +60,7 @@ setup(
+             "zulip-send=zulip.send:main",
+             "zulip-api-examples=zulip.api_examples:main",
+             
"zulip-matrix-bridge=integrations.bridge_with_matrix.matrix_bridge:main",
++            "zulip-irc-bridge=integrations.bridge_with_irc.irc_mirror:main",
+             "zulip-api=zulip.cli:cli",
+         ],
+     },
+-- 
+2.54.0
+

Reply via email to