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