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