virt-manager/virtManager/connmanager.py
Cole Robinson f107e39989 Switch to more traditional logging structure
Init a shared log instance in virtinst/logger.py, and use that
throughout the code base, so we aren't calling directly into
'logging'. This helps protect our logging output from being
cluttered with other library output, as happens with some
'requests' usage
2019-06-17 00:12:31 -04:00

67 lines
1.8 KiB
Python

# Copyright (C) 2018 Red Hat, Inc.
#
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
from virtinst import log
from .baseclass import vmmGObject
from .connection import vmmConnection
class vmmConnectionManager(vmmGObject):
"""
Tracks the list of connections, emits conn-added and conn-removed
"""
__gsignals__ = {
"conn-added": (vmmGObject.RUN_FIRST, None, [object]),
"conn-removed": (vmmGObject.RUN_FIRST, None, [str]),
}
@classmethod
def get_instance(cls, *args, **kwargs):
if not cls._instance:
cls._instance = vmmConnectionManager(*args, **kwargs)
return cls._instance
def __init__(self):
vmmGObject.__init__(self)
self._conns = {}
# Load URIs from gsettings
for uri in self.config.get_conn_uris():
self.add_conn(uri)
def _cleanup(self):
for conn in self._conns.values():
uri = conn.get_uri()
try:
conn.close()
self.emit("conn-removed", uri)
conn.cleanup()
except Exception:
log.exception("Error cleaning up conn=%s", uri)
self._conns = {}
@property
def conns(self):
return self._conns.copy()
def add_conn(self, uri):
if uri in self._conns:
return self._conns[uri]
conn = vmmConnection(uri)
self._conns[uri] = conn
self.config.add_conn_uri(uri)
self.emit("conn-added", conn)
return conn
def remove_conn(self, uri):
if uri not in self._conns:
return
conn = self._conns.pop(uri)
self.config.remove_conn_uri(uri)
self.emit("conn-removed", uri)
conn.cleanup()