kiwi.package_manager
1# Copyright (c) 2015 SUSE Linux GmbH. All rights reserved. 2# 3# This file is part of kiwi. 4# 5# kiwi is free software: you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation, either version 3 of the License, or 8# (at your option) any later version. 9# 10# kiwi is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with kiwi. If not, see <http://www.gnu.org/licenses/> 17# 18import importlib 19from typing import List 20from abc import ( 21 ABCMeta, 22 abstractmethod 23) 24import logging 25 26# project 27from kiwi.exceptions import KiwiPackageManagerSetupError 28 29log = logging.getLogger('kiwi') 30 31 32class PackageManager(metaclass=ABCMeta): 33 """ 34 **Package manager factory** 35 36 :param object repository: instance of :class:`Repository` 37 :param str package_manager: package manager name 38 :param list custom_args: custom package manager arguments list 39 40 :raises KiwiPackageManagerSetupError: if the requested package manager 41 type is not supported 42 :return: package manager 43 44 :rtype: PackageManagerBase subclass 45 """ 46 @abstractmethod 47 def __init__(self) -> None: 48 return None # pragma: no cover 49 50 @staticmethod 51 def new( 52 repository: object, package_manager_name: str, 53 custom_args: List = [], release_version: str = '' 54 ): 55 name_map = { 56 'zypper': ['zypper', 'Zypper'], 57 'dnf': ['dnf', 'Dnf'], 58 'dnf5': ['dnf5', 'Dnf5'], 59 'dnf4': ['dnf4', 'Dnf4'], 60 'microdnf': ['microdnf', 'MicroDnf'], 61 'pacman': ['pacman', 'Pacman'], 62 'apt': ['apt', 'Apt'], 63 'apk': ['apk', 'Apk'] 64 } 65 try: 66 (module_namespace, module_name) = name_map[package_manager_name] 67 package_manager = importlib.import_module( 68 'kiwi.package_manager.{0}'.format(module_namespace) 69 ) 70 module_name = 'PackageManager{0}'.format(module_name) 71 manager = package_manager.__dict__[module_name]( 72 repository, custom_args, release_version 73 ) 74 except Exception as issue: 75 raise KiwiPackageManagerSetupError( 76 'Support for package manager {0} not implemented {1}'.format( 77 package_manager_name, issue 78 ) 79 ) 80 log.info( 81 'Using package manager backend: {0}'.format(package_manager_name) 82 ) 83 return manager
log =
<Logger kiwi (DEBUG)>
class
PackageManager:
33class PackageManager(metaclass=ABCMeta): 34 """ 35 **Package manager factory** 36 37 :param object repository: instance of :class:`Repository` 38 :param str package_manager: package manager name 39 :param list custom_args: custom package manager arguments list 40 41 :raises KiwiPackageManagerSetupError: if the requested package manager 42 type is not supported 43 :return: package manager 44 45 :rtype: PackageManagerBase subclass 46 """ 47 @abstractmethod 48 def __init__(self) -> None: 49 return None # pragma: no cover 50 51 @staticmethod 52 def new( 53 repository: object, package_manager_name: str, 54 custom_args: List = [], release_version: str = '' 55 ): 56 name_map = { 57 'zypper': ['zypper', 'Zypper'], 58 'dnf': ['dnf', 'Dnf'], 59 'dnf5': ['dnf5', 'Dnf5'], 60 'dnf4': ['dnf4', 'Dnf4'], 61 'microdnf': ['microdnf', 'MicroDnf'], 62 'pacman': ['pacman', 'Pacman'], 63 'apt': ['apt', 'Apt'], 64 'apk': ['apk', 'Apk'] 65 } 66 try: 67 (module_namespace, module_name) = name_map[package_manager_name] 68 package_manager = importlib.import_module( 69 'kiwi.package_manager.{0}'.format(module_namespace) 70 ) 71 module_name = 'PackageManager{0}'.format(module_name) 72 manager = package_manager.__dict__[module_name]( 73 repository, custom_args, release_version 74 ) 75 except Exception as issue: 76 raise KiwiPackageManagerSetupError( 77 'Support for package manager {0} not implemented {1}'.format( 78 package_manager_name, issue 79 ) 80 ) 81 log.info( 82 'Using package manager backend: {0}'.format(package_manager_name) 83 ) 84 return manager
Package manager factory
Parameters
- object repository: instance of
Repository - str package_manager: package manager name
- list custom_args: custom package manager arguments list
Raises
- KiwiPackageManagerSetupError: if the requested package manager type is not supported
Returns
package manager
@staticmethod
def
new( repository: object, package_manager_name: str, custom_args: List = [], release_version: str = ''):
51 @staticmethod 52 def new( 53 repository: object, package_manager_name: str, 54 custom_args: List = [], release_version: str = '' 55 ): 56 name_map = { 57 'zypper': ['zypper', 'Zypper'], 58 'dnf': ['dnf', 'Dnf'], 59 'dnf5': ['dnf5', 'Dnf5'], 60 'dnf4': ['dnf4', 'Dnf4'], 61 'microdnf': ['microdnf', 'MicroDnf'], 62 'pacman': ['pacman', 'Pacman'], 63 'apt': ['apt', 'Apt'], 64 'apk': ['apk', 'Apk'] 65 } 66 try: 67 (module_namespace, module_name) = name_map[package_manager_name] 68 package_manager = importlib.import_module( 69 'kiwi.package_manager.{0}'.format(module_namespace) 70 ) 71 module_name = 'PackageManager{0}'.format(module_name) 72 manager = package_manager.__dict__[module_name]( 73 repository, custom_args, release_version 74 ) 75 except Exception as issue: 76 raise KiwiPackageManagerSetupError( 77 'Support for package manager {0} not implemented {1}'.format( 78 package_manager_name, issue 79 ) 80 ) 81 log.info( 82 'Using package manager backend: {0}'.format(package_manager_name) 83 ) 84 return manager