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
+