commit: 14a30e74032de0399de3e8ffefbf04c2316070a5 Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> AuthorDate: Sat Oct 24 16:15:53 2020 +0000 Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> CommitDate: Sun Oct 25 00:27:39 2020 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=14a30e74
app-admin/system-config-printer: python3_9 w/ required fixes Package-Manager: Portage-3.0.8, Repoman-3.0.2 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> ...config-printer-1.5.12-catch-urllib-errors.patch | 22 +++ ...config-printer-1.5.12-fix-remember-passwd.patch | 121 +++++++++++++++++ .../system-config-printer-1.5.12-py39-1.patch | 45 +++++++ .../system-config-printer-1.5.12-py39-2.patch | 147 +++++++++++++++++++++ .../system-config-printer-1.5.12-r2.ebuild | 86 ++++++++++++ 5 files changed, 421 insertions(+) diff --git a/app-admin/system-config-printer/files/system-config-printer-1.5.12-catch-urllib-errors.patch b/app-admin/system-config-printer/files/system-config-printer-1.5.12-catch-urllib-errors.patch new file mode 100644 index 00000000000..fbae8442615 --- /dev/null +++ b/app-admin/system-config-printer/files/system-config-printer-1.5.12-catch-urllib-errors.patch @@ -0,0 +1,22 @@ +From feed693225cc0c26464bfc0adef21da72581e811 Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal <[email protected]> +Date: Thu, 28 Nov 2019 15:45:22 +0100 +Subject: [PATCH] Catch errors from urllib too + +--- + newprinter.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/newprinter.py b/newprinter.py +index 8b9298887..6c71ec578 100644 +--- a/newprinter.py ++++ b/newprinter.py +@@ -4183,7 +4183,7 @@ def getNPPPD(self): + tmpf.flush () + ppd = cups.PPD(tmpf.name) + +- except RuntimeError as e: ++ except (RuntimeError, urllib.error.HTTPError) as e: + debugprint ("RuntimeError: " + repr (e)) + if self.rbtnNPFoomatic.get_active(): + # Foomatic database problem of some sort. diff --git a/app-admin/system-config-printer/files/system-config-printer-1.5.12-fix-remember-passwd.patch b/app-admin/system-config-printer/files/system-config-printer-1.5.12-fix-remember-passwd.patch new file mode 100644 index 00000000000..980d1e03154 --- /dev/null +++ b/app-admin/system-config-printer/files/system-config-printer-1.5.12-fix-remember-passwd.patch @@ -0,0 +1,121 @@ +From b74c701feb52a1d2865fe1d33c393f71ae3ac47a Mon Sep 17 00:00:00 2001 +From: Ave Ozkal <[email protected]> +Date: Thu, 19 Mar 2020 13:30:23 +0300 +Subject: [PATCH 1/3] jobviewer: Use sync methods for secret.service + +--- + jobviewer.py | 28 +++++++++------------------- + 1 file changed, 9 insertions(+), 19 deletions(-) + +diff --git a/jobviewer.py b/jobviewer.py +index b95bf6c58..ba8abd06f 100644 +--- a/jobviewer.py ++++ b/jobviewer.py +@@ -91,36 +91,26 @@ + class ServiceGet: + service = Secret.Service() + +- def on_get_service(self, source, result, unused): +- service = Secret.Service.get_finish(result) +- + def __init__(self): +- Secret.Service.get(0, +- None, +- self.on_get_service, +- None) ++ self.service = Secret.Service.get(0, ++ None) + + def get_service(self): +- return ServiceGet.service ++ return self.service + + + class ItemSearch: + items = list() + +- def on_search_item(self, source, result, unused): +- items = Secret.Service.search_finish(None, result) +- + def __init__(self, service, attrs): +- Secret.Service.search(service, +- NETWORK_PASSWORD, +- attrs, +- Secret.SearchFlags.LOAD_SECRETS, +- None, +- self.on_search_item, +- None) ++ self.items = Secret.Service.search_sync(service, ++ NETWORK_PASSWORD, ++ attrs, ++ Secret.SearchFlags.LOAD_SECRETS, ++ None) + + def get_items(self): +- return ItemSearch.items ++ return self.items + + + class PasswordStore: + +From 152b617f511cd44757d2db4d730067aca8cf69a9 Mon Sep 17 00:00:00 2001 +From: Ave Ozkal <[email protected]> +Date: Thu, 19 Mar 2020 14:39:21 +0300 +Subject: [PATCH 2/3] jobviewer: properly use sync + +--- + jobviewer.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/jobviewer.py b/jobviewer.py +index ba8abd06f..761673b49 100644 +--- a/jobviewer.py ++++ b/jobviewer.py +@@ -92,8 +92,8 @@ class ServiceGet: + service = Secret.Service() + + def __init__(self): +- self.service = Secret.Service.get(0, +- None) ++ self.service = Secret.Service.get_sync(0, ++ None) + + def get_service(self): + return self.service + +From 00177768ca1464c694acde4cdbabc1a18420c176 Mon Sep 17 00:00:00 2001 +From: Ave Ozkal <[email protected]> +Date: Thu, 19 Mar 2020 14:40:55 +0300 +Subject: [PATCH 3/3] jobviewer: Properly fetch username and password + +--- + jobviewer.py | 14 ++------------ + 1 file changed, 2 insertions(+), 12 deletions(-) + +diff --git a/jobviewer.py b/jobviewer.py +index 761673b49..5376a7e88 100644 +--- a/jobviewer.py ++++ b/jobviewer.py +@@ -1049,20 +1049,10 @@ def get_authentication (self, job, device_uri, printer_uri, + if items: + auth_info = ['' for x in auth_info_required] + ind = auth_info_required.index ('username') +- +- for attr in items[0].attributes: +- # It might be safe to assume here that the +- # user element is always the second item in a +- # NETWORK_PASSWORD element but lets make sure. +- if attr.name == 'user': +- auth_info[ind] = attr.get_string() +- break +- else: +- debugprint ("Did not find username keyring " +- "attributes.") ++ auth_info[ind] = items[0].get_attributes().get("user") + + ind = auth_info_required.index ('password') +- auth_info[ind] = items[0].secret ++ auth_info[ind] = items[0].get_secret().get().decode() + break + else: + debugprint ("Failed to find secret in keyring.") diff --git a/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-1.patch b/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-1.patch new file mode 100644 index 00000000000..658a63d65c7 --- /dev/null +++ b/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-1.patch @@ -0,0 +1,45 @@ +From cf7a74217558b19aff7c21a724878bcc15dc4e38 Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal <[email protected]> +Date: Mon, 5 Oct 2020 09:26:40 +0200 +Subject: [PATCH] isAlive() is removed, use is_alive() + +--- + asyncipp.py | 2 +- + timedops.py | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/asyncipp.py b/asyncipp.py +index 5bc160e0f..61cd72136 100644 +--- a/asyncipp.py ++++ b/asyncipp.py +@@ -269,7 +269,7 @@ def destroy (self): + for binding in self.bindings: + delattr (self, binding) + +- if self.thread.isAlive (): ++ if self.thread.is_alive (): + debugprint ("Stopping worker thread") + self.thread.stop () + GLib.timeout_add_seconds (1, self._reap_thread) +diff --git a/timedops.py b/timedops.py +index 8a8741c82..111d575f6 100644 +--- a/timedops.py ++++ b/timedops.py +@@ -157,7 +157,7 @@ def run (self): + self.exception = e + + def collect_result (self): +- if self.isAlive (): ++ if self.is_alive (): + # We've been canceled. + raise OperationCanceled() + +@@ -212,7 +212,7 @@ def run (self): + return self.thread.collect_result () + + def _check_thread (self): +- if self.thread.isAlive (): ++ if self.thread.is_alive (): + # Thread still running. + return True + diff --git a/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-2.patch b/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-2.patch new file mode 100644 index 00000000000..eccb3939e0d --- /dev/null +++ b/app-admin/system-config-printer/files/system-config-printer-1.5.12-py39-2.patch @@ -0,0 +1,147 @@ +From 63eccd5603e19cd35d6d44af65443665a3c63f38 Mon Sep 17 00:00:00 2001 +From: Zdenek Dohnal <[email protected]> +Date: Wed, 22 Jul 2020 13:57:13 +0200 +Subject: [PATCH] python3.9 - xml module removed elem.getchildren() method, use + list(elem) + +--- + cupshelpers/openprinting.py | 6 +++--- + cupshelpers/xmldriverprefs.py | 20 ++++++++++---------- + xml/validate.py | 10 +++++----- + 3 files changed, 18 insertions(+), 18 deletions(-) + +diff --git a/cupshelpers/openprinting.py b/cupshelpers/openprinting.py +index c616d913c..9bb4764c9 100755 +--- a/cupshelpers/openprinting.py ++++ b/cupshelpers/openprinting.py +@@ -338,7 +338,7 @@ def parse_result (status, data, result): + packages = {} + container = driver.find ('packages') + if container is not None: +- for arch in container.getchildren (): ++ for arch in list(container): + rpms = {} + for package in arch.findall ('package'): + rpm = {} +@@ -351,7 +351,7 @@ def parse_result (status, data, result): + + repositories = package.find ('repositories') + if repositories is not None: +- for pkgsys in repositories.getchildren (): ++ for pkgsys in list(repositories): + rpm.setdefault('repositories', {})[pkgsys.tag] = pkgsys.text + + rpms[package.attrib['file']] = rpm +@@ -363,7 +363,7 @@ def parse_result (status, data, result): + ppds = [] + container = driver.find ('ppds') + if container is not None: +- for each in container.getchildren (): ++ for each in list(container): + ppds.append (each.text) + + if ppds: +diff --git a/cupshelpers/xmldriverprefs.py b/cupshelpers/xmldriverprefs.py +index 4177e1c0f..0d02950f4 100644 +--- a/cupshelpers/xmldriverprefs.py ++++ b/cupshelpers/xmldriverprefs.py +@@ -27,7 +27,7 @@ + + def PreferredDrivers (filename): + preferreddrivers = xml.etree.ElementTree.XML (open (filename).read ()) +- return preferreddrivers.getchildren() ++ return list(preferreddrivers) + + class DeviceIDMatch: + """ +@@ -227,10 +227,10 @@ def load (self, drivertypes): + """ + + types = [] +- for drivertype in drivertypes.getchildren (): ++ for drivertype in list(drivertypes): + t = DriverType (drivertype.attrib["name"]) + +- for child in drivertype.getchildren (): ++ for child in list(drivertype): + if child.tag == "ppdname": + t.add_ppd_name (child.attrib["match"]) + elif child.tag == "attribute": +@@ -238,7 +238,7 @@ def load (self, drivertypes): + child.attrib["match"]) + elif child.tag == "deviceid": + deviceid_match = DeviceIDMatch () +- for field in child.getchildren (): ++ for field in list(child): + if field.tag == "field": + deviceid_match.add_field (field.attrib["name"], + field.attrib["match"]) +@@ -414,29 +414,29 @@ def load (self, preferreddrivers): + Load the policy from an XML file. + """ + +- for printer in preferreddrivers.getchildren (): ++ for printer in list(preferreddrivers): + ptype = PrinterType () +- for child in printer.getchildren (): ++ for child in list(printer): + if child.tag == "make-and-model": + ptype.add_make_and_model (child.attrib["match"]) + elif child.tag == "deviceid": + deviceid_match = DeviceIDMatch () +- for field in child.getchildren (): ++ for field in list(child): + if field.tag == "field": + deviceid_match.add_field (field.attrib["name"], + field.attrib["match"]) + ptype.add_deviceid_match (deviceid_match) + + elif child.tag == "drivers": +- for drivertype in child.getchildren (): ++ for drivertype in list(child): + ptype.add_drivertype_pattern (drivertype.text) + + elif child.tag == "avoid": +- for drivertype in child.getchildren (): ++ for drivertype in list(child): + ptype.add_avoidtype_pattern (drivertype.text) + + elif child.tag == "blacklist": +- for drivertype in child.getchildren (): ++ for drivertype in list(child): + ptype.add_blacklisted (drivertype.text) + + self.ptypes.append (ptype) +diff --git a/xml/validate.py b/xml/validate.py +index 8fc201ecf..ba16766dc 100644 +--- a/xml/validate.py ++++ b/xml/validate.py +@@ -35,23 +35,23 @@ def validate (self): + filename = self._filename + print ("Validating %s" % filename) + preferreddrivers = xml.etree.ElementTree.XML (open (filename).read ()) +- (drivertypes, preferenceorder) = preferreddrivers.getchildren () ++ (drivertypes, preferenceorder) = list(preferreddrivers) + validates = True + + names = set() +- for drivertype in drivertypes.getchildren (): ++ for drivertype in list(drivertypes): + name = drivertype.get ("name") + names.add (name) + +- for printer in preferenceorder.getchildren (): ++ for printer in list(preferenceorder): + types = [] + drivers = printer.find ("drivers") + if drivers is not None: +- types.extend (drivers.getchildren ()) ++ types.extend (list(drivers)) + + blacklist = printer.find ("blacklist") + if blacklist is not None: +- types.extend (blacklist.getchildren ()) ++ types.extend (list(blacklist)) + + for drivertype in types: + pattern = drivertype.text.strip () diff --git a/app-admin/system-config-printer/system-config-printer-1.5.12-r2.ebuild b/app-admin/system-config-printer/system-config-printer-1.5.12-r2.ebuild new file mode 100644 index 00000000000..c97eaf9b4f2 --- /dev/null +++ b/app-admin/system-config-printer/system-config-printer-1.5.12-r2.ebuild @@ -0,0 +1,86 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +PYTHON_COMPAT=( python3_{7,8,9} ) +PYTHON_REQ_USE="xml" +inherit gnome2 python-single-r1 systemd + +DESCRIPTION="Graphical user interface for CUPS administration" +HOMEPAGE="https://github.com/OpenPrinting/system-config-printer" +SRC_URI="https://github.com/OpenPrinting/${PN}/releases/download/${PV}/${P}.tar.xz" + +LICENSE="GPL-2+" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86" +SLOT="0" +IUSE="gnome-keyring policykit" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +# Needs cups running, bug 284005 +RESTRICT="test" + +# Additional unhandled dependencies +# gnome-extra/gnome-packagekit[${PYTHON_USEDEP}] with pygobject:2 ? +# python samba client: smbc +# selinux: needed for troubleshooting +COMMON_DEPEND="${PYTHON_DEPS} + dev-libs/glib:2 + net-print/cups[dbus] + virtual/libusb:1 + >=virtual/udev-172 + x11-libs/gtk+:3[introspection] + x11-libs/libnotify[introspection] + x11-libs/pango[introspection] +" +DEPEND="${COMMON_DEPEND} + app-text/docbook-xml-dtd:4.1.2 + >=app-text/xmlto-0.0.22 + dev-perl/XML-Parser + dev-util/desktop-file-utils + dev-util/intltool + sys-devel/gettext + virtual/pkgconfig +" +RDEPEND="${COMMON_DEPEND} + $(python_gen_cond_dep ' + dev-python/dbus-python[${PYTHON_MULTI_USEDEP}] + dev-python/pycairo[${PYTHON_MULTI_USEDEP}] + dev-python/pycups[${PYTHON_MULTI_USEDEP}] + dev-python/pygobject:3[${PYTHON_MULTI_USEDEP}] + dev-python/requests[${PYTHON_MULTI_USEDEP}] + dev-python/urllib3[${PYTHON_MULTI_USEDEP}] + ') + gnome-keyring? ( app-crypt/libsecret[introspection] ) + policykit? ( net-print/cups-pk-helper ) +" + +PATCHES=( + "${FILESDIR}"/${P}-check-for-null.patch + "${FILESDIR}"/${P}-fix-abrt-in-udev-configure-printer.patch + "${FILESDIR}"/${P}-catch-urllib-errors.patch + "${FILESDIR}"/${P}-fix-remember-passwd.patch + "${FILESDIR}"/${P}-py39-{1,2}.patch +) + +pkg_setup() { + python-single-r1_pkg_setup +} + +src_configure() { + gnome2_src_configure \ + --enable-nls \ + --with-desktop-vendor=Gentoo \ + --with-udev-rules \ + --with-systemdsystemunitdir=$(systemd_get_systemunitdir) +} + +src_compile() { + gnome2_src_compile +} + +src_install() { + gnome2_src_install + python_fix_shebang "${ED}" + python_optimize +}
