From 7787fb976497569fd49f77eb8ad269ca8132b351 Mon Sep 17 00:00:00 2001 From: Papoteur <papoteur@mageia.org> Date: Sat, 1 May 2021 18:10:24 +0200 Subject: [PATCH] Add a specific function for get_packages for standard fields decription, size and group This give an important improvement in time of GetPackages at start of application and relaod. Gain is about 20% of the period of loading cache. --- daemon/dnfdaemon-system.py | 5 ++++- python/dnfdaemon/server/__init__.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/daemon/dnfdaemon-system.py b/daemon/dnfdaemon-system.py index b9811ac..df21a20 100755 --- a/daemon/dnfdaemon-system.py +++ b/daemon/dnfdaemon-system.py @@ -235,7 +235,10 @@ class DnfDaemon(dnfdaemon.server.DnfDaemonBase): :param sender: """ self.working_start(sender, write=False) - value = self.get_packages(pkg_filter, fields) + if fields == ['summary', 'size', 'group']: + value = self.get_packages_ndsg(pkg_filter) + else: + value = self.get_packages(pkg_filter, fields) return self.working_ended(value) @Logger diff --git a/python/dnfdaemon/server/__init__.py b/python/dnfdaemon/server/__init__.py index eb78c2b..a9a95bf 100644 --- a/python/dnfdaemon/server/__init__.py +++ b/python/dnfdaemon/server/__init__.py @@ -387,6 +387,20 @@ class DnfDaemonBase(dbus.service.Object, DownloadCallback): value = [self._get_po_list(po, attrs) for po in pkgs] return json.dumps(value) + @Logger + def get_packages_ndsg(self, pkg_filter): + """Get packages and attribute values based on a filter. + + :param pkg_filter: pkg pkg_filter string ('installed','updates' etc) + :param attrs: list of attributes to get. + """ + value = [] + if pkg_filter in ['installed', 'available', 'updates', 'obsoletes', + 'recent', 'extras', 'updates_all']: + pkgs = getattr(self.base.packages, pkg_filter) + value = [[self._get_id(po), po.summary, po.size, po.group] for po in pkgs] + return json.dumps(value) + def get_attribute(self, id, attr): """Get package attribute. -- GitLab