File python3.14-nodedownload-FancyURLopener.patch of Package nodejs-electron

From dfcb824ae3e7752abf3c809a3f226cb21dd2187a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lum=C3=ADr=20=27Frenzy=27=20Balhar?=
 <frenzy.madness@gmail.com>
Date: Sun, 22 Jun 2025 07:49:14 +0200
Subject: [PATCH] tools: make nodedownload module compatible with Python 3.14

FancyURLopener and URLopener have been deprecated since
Python 3.3 and they are removed completely from 3.14.

Fixes: https://github.com/nodejs/node/issues/58740
PR-URL: https://github.com/nodejs/node/pull/58752
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
---
 tools/configure.d/nodedownload.py | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/tools/configure.d/nodedownload.py b/tools/configure.d/nodedownload.py
index 4f144e0e4b406c..0d65c33606b853 100644
--- a/third_party/electron_node/tools/configure.d/nodedownload.py
+++ b/third_party/electron_node/tools/configure.d/nodedownload.py
@@ -7,10 +7,7 @@
 import zipfile
 import tarfile
 import contextlib
-try:
-    from urllib.request import FancyURLopener, URLopener
-except ImportError:
-    from urllib import FancyURLopener, URLopener
+from urllib.request import build_opener, install_opener, urlretrieve
 
 def formatSize(amt):
     """Format a size as a string in MB"""
@@ -21,11 +18,6 @@ def spin(c):
     spin = ".:|'"
     return (spin[c % len(spin)])
 
-class ConfigOpener(FancyURLopener):
-    """fancy opener used by retrievefile. Set a UA"""
-    # append to existing version (UA)
-    version = '%s node.js/configure' % URLopener.version
-
 def reporthook(count, size, total):
     """internal hook used by retrievefile"""
     sys.stdout.write(' Fetch: %c %sMB total, %sMB downloaded   \r' %
@@ -38,7 +30,10 @@ def retrievefile(url, targetfile):
     try:
         sys.stdout.write(' <%s>\nConnecting...\r' % url)
         sys.stdout.flush()
-        ConfigOpener().retrieve(url, targetfile, reporthook=reporthook)
+        opener = build_opener()
+        opener.addheaders = [('User-agent', f'Python-urllib/{sys.version_info.major}.{sys.version_info.minor} node.js/configure')]
+        install_opener(opener)
+        urlretrieve(url, targetfile, reporthook=reporthook)
         print('')  # clear the line
         return targetfile
     except IOError as err:
openSUSE Build Service is sponsored by