From 3d25810b948c99681fbbb41ff39d9e8ea2c34829 Mon Sep 17 00:00:00 2001 From: Jiri Konecny Date: Fri, 7 Feb 2025 17:29:39 +0100 Subject: [PATCH] Add new API for Flatpak to CalculateSizeWithTask This API is used from UI code just after new package selection is resolved. This will allow us to react on package selection in Flatpak immediately. Also move CalculateFlatpaksSizeTask to initialization because this task is not used for installation. --- .../payloads/payload/flatpak/flatpak.py | 10 ++--- .../payload/flatpak/flatpak_interface.py | 9 +++++ .../payload/flatpak/initialization.py | 37 +++++++++++++++++++ .../payloads/payload/flatpak/installation.py | 17 --------- pyanaconda/payload/dnf/payload.py | 8 ++++ 5 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 pyanaconda/modules/payloads/payload/flatpak/initialization.py diff --git a/pyanaconda/modules/payloads/payload/flatpak/flatpak.py b/pyanaconda/modules/payloads/payload/flatpak/flatpak.py index abd36650fb1..78543aaff0d 100644 --- a/pyanaconda/modules/payloads/payload/flatpak/flatpak.py +++ b/pyanaconda/modules/payloads/payload/flatpak/flatpak.py @@ -23,12 +23,12 @@ from pyanaconda.modules.payloads.payload.flatpak.flatpak_interface import FlatpakInterface from pyanaconda.modules.payloads.payload.flatpak.flatpak_manager import FlatpakManager from pyanaconda.modules.payloads.payload.flatpak.installation import ( - CalculateFlatpaksSizeTask, CleanUpDownloadLocationTask, DownloadFlatpaksTask, InstallFlatpaksTask, PrepareDownloadLocationTask, ) +from pyanaconda.modules.payloads.payload.flatpak.initialization import CalculateFlatpaksSizeTask from pyanaconda.modules.payloads.payload.payload_base import PayloadBase log = get_module_logger(__name__) @@ -87,7 +87,6 @@ def calculate_required_space(self): :return: required size in bytes :rtype: int """ - self._flatpak_manager.calculate_size() download_size = self._flatpak_manager.download_size install_size = self._flatpak_manager.install_size size = calculate_required_space(download_size, install_size) @@ -95,13 +94,14 @@ def calculate_required_space(self): download_size, install_size, size) return size + def calculate_size_with_task(self): + """Refresh size requirement with task.""" + return CalculateFlatpaksSizeTask(flatpak_manager=self._flatpak_manager) + def install_with_tasks(self): """Install the payload with tasks.""" tasks = [ - CalculateFlatpaksSizeTask( - flatpak_manager=self._flatpak_manager, - ), PrepareDownloadLocationTask( flatpak_manager=self._flatpak_manager, ), diff --git a/pyanaconda/modules/payloads/payload/flatpak/flatpak_interface.py b/pyanaconda/modules/payloads/payload/flatpak/flatpak_interface.py index 2904b829a1e..46734accfea 100644 --- a/pyanaconda/modules/payloads/payload/flatpak/flatpak_interface.py +++ b/pyanaconda/modules/payloads/payload/flatpak/flatpak_interface.py @@ -18,11 +18,20 @@ # Red Hat, Inc. # from dasbus.server.interface import dbus_interface +from dasbus.typing import * # pylint: disable=wildcard-import from pyanaconda.modules.common.constants.interfaces import PAYLOAD_FLATPAK +from pyanaconda.modules.common.containers import TaskContainer from pyanaconda.modules.payloads.payload.payload_base_interface import PayloadBaseInterface @dbus_interface(PAYLOAD_FLATPAK.interface_name) class FlatpakInterface(PayloadBaseInterface): """DBus interface for Flatpak payload module.""" + + + def CalculateSizeWithTask(self) -> ObjPath: + """Calculate required size based on the software selection with task.""" + return TaskContainer.to_object_path( + self.implementation.calculate_size_with_task() + ) diff --git a/pyanaconda/modules/payloads/payload/flatpak/initialization.py b/pyanaconda/modules/payloads/payload/flatpak/initialization.py new file mode 100644 index 00000000000..b3063bdf7c5 --- /dev/null +++ b/pyanaconda/modules/payloads/payload/flatpak/initialization.py @@ -0,0 +1,37 @@ +# +# Copyright (C) 2025 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# + +from pyanaconda.modules.common.task import Task +from pyanaconda.modules.payloads.payload.flatpak.flatpak_manager import FlatpakManager + + +class CalculateFlatpaksSizeTask(Task): + """Task to determine space needed for Flatpaks""" + + def __init__(self, flatpak_manager: FlatpakManager): + """Create a new task.""" + super().__init__() + self._flatpak_manager = flatpak_manager + + @property + def name(self): + """Name of the task.""" + return "Calculate needed space for Flatpaks" + + def run(self): + self._flatpak_manager.calculate_size() diff --git a/pyanaconda/modules/payloads/payload/flatpak/installation.py b/pyanaconda/modules/payloads/payload/flatpak/installation.py index 26ed0c1bcf8..7ec073812b9 100644 --- a/pyanaconda/modules/payloads/payload/flatpak/installation.py +++ b/pyanaconda/modules/payloads/payload/flatpak/installation.py @@ -29,23 +29,6 @@ FLATPAK_MIRROR_DIR_SUFFIX = 'flatpak.mirror' -class CalculateFlatpaksSizeTask(Task): - """Task to determine space needed for Flatpaks""" - - def __init__(self, flatpak_manager: FlatpakManager): - """Create a new task.""" - super().__init__() - self._flatpak_manager = flatpak_manager - - @property - def name(self): - """Name of the task.""" - return "Calculate needed space for Flatpaks" - - def run(self): - self._flatpak_manager.calculate_size() - - class PrepareDownloadLocationTask(Task): """The installation task for setting up the download location.""" diff --git a/pyanaconda/payload/dnf/payload.py b/pyanaconda/payload/dnf/payload.py index 6063404f99f..559ece4e6a9 100644 --- a/pyanaconda/payload/dnf/payload.py +++ b/pyanaconda/payload/dnf/payload.py @@ -350,6 +350,14 @@ def check_software_selection(self, selection): result = unwrap_variant(task_proxy.GetResult()) report = ValidationReport.from_structure(result) + # Start side payload processing if report is valid + if report.is_valid(): + side_payload_path = self.proxy.SidePayload + if side_payload_path: + side_payload = PAYLOADS.get_proxy(side_payload_path) + side_task_proxy = PAYLOADS.get_proxy(side_payload.CalculateSizeWithTask()) + sync_run_task(side_task_proxy) + # This validation is no longer required. self._software_validation_required = False