# Copyright (c) 2025 Kim Jarvis TPF Software Services S.A. kim.jarvis@tpfsystems.com # This software is licensed under the MIT License. See the LICENSE file for details.#fromtypingimportListfromreemote.operation_packagesimportOperation_packagesfromreemote.commands.pipx.installimportInstallfromreemote.commands.pipx.removeimportRemovefromreemote.facts.pipx.get_packagesimportGet_packages
[docs]classPackages(Operation_packages):""" A class to manage package operations on a remote system using `pipx`. This class provides functionality to install or remove Python applications on remote systems using the pipx package manager. It allows configuration of execution privileges and safety guards for package operations. Attributes: packages (List[str]): List of package names to install or remove. present (bool): If `True`, packages will be installed; if `False`, packages will be removed. guard (bool): If `False` the commands will not be executed. sudo (bool): If `True`, the commands will be executed with [sudo](file:///home/kim/reemote/reemote/command.py#L11-L11) privileges. su (bool): If `True`, the commands will be executed with [su](file:///home/kim/reemote/reemote/command.py#L12-L12) privileges. **Examples:** .. code:: python # Install Python applications on all hosts r = yield Packages(["httpie", "pipenv"], present=True) # Check if the operation was successful if r.cp.return_code == 0: print("Python applications installed successfully") # Remove Python applications on all hosts r = yield Packages(["httpie", "pipenv"], present=False) # Check if the operation was successful if r.cp.return_code == 0: print("Python applications removed successfully") Usage: This class is designed to be used in a generator-based workflow where commands are yielded for execution. Notes: - Commands are constructed based on the [present](file:///home/kim/reemote/reemote/operation_packages.py#L30-L30) flag to determine whether to install or remove packages. - Uses `pipx install` and `pipx uninstall` commands internally for package management. - Inherits from [Operation_packages](file:///home/kim/reemote/reemote/operation_packages.py#L4-L89) base class. """def__init__(self,packages:List[str],present:bool,guard:bool=True,sudo:bool=False,su:bool=False):super().__init__(packages,present,guard,sudo,su)