anaconda/anaconda-40.22.3.13/pyanaconda/modules/boss/module_manager/module_observer.py
2024-11-14 21:39:56 -08:00

76 lines
2.6 KiB
Python

#
# Copyright (C) 2019 Red Hat, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty 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, see <http://www.gnu.org/licenses/>.
#
from dasbus.namespace import get_namespace_from_name, get_dbus_path, get_dbus_name
from dasbus.client.observer import DBusObserver, DBusObserverError
from pyanaconda.anaconda_loggers import get_module_logger
from pyanaconda.modules.common.constants.namespaces import ADDONS_NAMESPACE
log = get_module_logger(__name__)
class ModuleObserver(DBusObserver):
"""Observer of an Anaconda module."""
def __init__(self, message_bus, service_name):
"""Creates a module observer.
:param message_bus: a message bus
:param service_name: a DBus name of a service
"""
super().__init__(message_bus, service_name)
self._proxy = None
self._is_addon = service_name.startswith(get_dbus_name(*ADDONS_NAMESPACE))
self._namespace = get_namespace_from_name(service_name)
self._object_path = get_dbus_path(*self._namespace)
@property
def is_addon(self):
"""Is the observed module an addon?
:return: True or False
"""
return self._is_addon
@property
def proxy(self):
"""Returns a proxy of the remote object."""
if not self._is_service_available:
raise DBusObserverError("Service {} is not available."
.format(self._service_name))
if not self._proxy:
self._proxy = self._message_bus.get_proxy(self._service_name,
self._object_path)
return self._proxy
def _enable_service(self):
"""Enable the service."""
self._proxy = None
super()._enable_service()
def _disable_service(self):
"""Disable the service"""
self._proxy = None
super()._disable_service()
def __repr__(self):
"""Returns a string representation."""
return "{}({},{})".format(self.__class__.__name__,
self._service_name,
self._object_path)