diff options
Diffstat (limited to 'app-admin/system-config-printer')
5 files changed, 421 insertions, 0 deletions
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 000000000000..fbae84426159 --- /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 <zdohnal@redhat.com> +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 000000000000..980d1e031548 --- /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 <ave@ave.zone> +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 <ave@ave.zone> +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 <ave@ave.zone> +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 000000000000..658a63d65c78 --- /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 <zdohnal@redhat.com> +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 000000000000..eccb3939e0d1 --- /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 <zdohnal@redhat.com>
+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 000000000000..c97eaf9b4f29 --- /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 +} |