File URLopener-was-removed-in-Python-3.14-and-hplip-trace.patch of Package hplip

From ff0ea4370845a314a32730f76f40cc7ff960c7ee Mon Sep 17 00:00:00 2001
From: Zdenek Dohnal <zdohnal@redhat.com>
Date: Fri, 15 Aug 2025 23:36:43 +0200
Subject: [PATCH 26/33] URLopener was removed in Python 3.14 and hplip
 tracebacks without it

URLopener was removed in Python 3.14 in Fedora 43, which causes several hplip scripts to traceback.

For now I've applied the attached patch to remove URLopener, since hplip modules look like they don't use the methods from the class, but rather the method implemented in class LocalOpener, which inherits from URLOpener - major scripts like hp-plugin, hp-setup and hp-toolbox look to be working with the fix.

It would be great if URLopener was removed from hplip project and replaced if required - Fedora will try the attached patch for now to make hplip working to some extent in Fedora 43.

Traceback example:

/usr/share/hplip/prnt/cups.py:699: SyntaxWarning: 'return' in a 'finally' block
  return fax_ppd,expected_fax_ppd_name, nick
Traceback (most recent call last):
  File "/usr/bin/hp-plugin", line 41, in <module>
    from base import device, utils, tui, module, services
  File "/usr/share/hplip/base/device.py", line 2691, in <module>
    class LocalOpener(urllib_request.URLopener):
                      ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'urllib.request' has no attribute 'URLopener'
---
 base/device.py | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/base/device.py b/base/device.py
index d381363..ef52359 100644
--- a/base/device.py
+++ b/base/device.py
@@ -2525,9 +2525,9 @@ Content-length: %d\r
                 data = None
 
             log.debug("Opening: %s" % url2)
-            opener = LocalOpener({})
+            opener = LocalOpener()
             try:
-                f = opener.open(url2, data)
+                f = opener.open_hp(url2, data)
                 
             except Error:
                 log.error("Status read failed: %s" % url2)
@@ -2547,7 +2547,7 @@ Content-length: %d\r
         try:
             url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
             data = self
-            opener = LocalOpenerEWS_LEDM({})
+            opener = LocalOpenerEWS_LEDM()
             try:
                 if footer:
                     return opener.open_hp(url2, data, footer)
@@ -2562,7 +2562,7 @@ Content-length: %d\r
         try:
             url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
             data = self
-            opener = LocalOpener_LEDM({})
+            opener = LocalOpener_LEDM()
             try:
                 if footer:
                     return opener.open_hp(url2, data, footer)
@@ -2579,7 +2579,7 @@ Content-length: %d\r
             url="/cdm/supply/v1/suppliesPublic"
             url2 = "%s&loc=%s" % (self.device_uri.replace('hpfax:', 'hp:'), url)
             data = self
-            opener = LocalOpener_CDM({})
+            opener = LocalOpener_CDM()
             try:
                 if footer:
                     return opener.open_hp(url2, data, footer)
@@ -2687,7 +2687,7 @@ Content-length: %d\r
 
 
 # URLs: hp:/usb/HP_LaserJet_3050?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener(urllib_request.URLopener):
+class LocalOpener():
     def open_hp(self, url, dev):
         log.debug("open_hp(%s)" % url)
 
@@ -2717,7 +2717,7 @@ class LocalOpener(urllib_request.URLopener):
             return response#.fp
 
 # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpenerEWS_LEDM(urllib_request.URLopener):
+class LocalOpenerEWS_LEDM():
     def open_hp(self, url, dev, foot=""):
         log.debug("open_hp(%s)" % url)
 
@@ -2743,7 +2743,7 @@ class LocalOpenerEWS_LEDM(urllib_request.URLopener):
 
 
 # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener_LEDM(urllib_request.URLopener):
+class LocalOpener_LEDM():
     def open_hp(self, url, dev, foot=""):
         log.debug("open_hp(%s)" % url)
 
@@ -2770,7 +2770,7 @@ class LocalOpener_LEDM(urllib_request.URLopener):
 
 
 # URLs: hp:/usb/HP_OfficeJet_7500?serial=00XXXXXXXXXX&loc=/hp/device/info_device_status.xml
-class LocalOpener_CDM(urllib_request.URLopener):
+class LocalOpener_CDM():
     def open_hp(self, url, dev, foot=""):
         log.debug("open_hp(%s)" % url)
         match_obj = http_pat_url.search(url)
-- 
2.52.0

openSUSE Build Service is sponsored by