python/qemu: qmp: Make QEMUMonitorProtocol a context manager

This implement the __enter__ and __exit__ functions on
QEMUMonitorProtocol class so that it can be used on 'with'
statement and the resources will be free up on block end:

with QEMUMonitorProtocol(socket_path) as qmp:
    qmp.connect()
    qmp.command('query-status')

Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Message-Id: <20200204141111.3207-5-wainersm@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
Wainer dos Santos Moschetta 2020-02-04 11:11:10 -03:00 committed by Philippe Mathieu-Daudé
parent 54aafc2fc6
commit 07608e807d
1 changed files with 13 additions and 2 deletions

View File

@ -139,6 +139,15 @@ class QEMUMonitorProtocol:
raise QMPConnectError("Error while reading from socket")
self.__sock.settimeout(None)
def __enter__(self):
# Implement context manager enter function.
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
# Implement context manager exit function.
self.close()
return False
def connect(self, negotiate=True):
"""
Connect to the QMP Monitor and perform capabilities negotiation.
@ -265,8 +274,10 @@ class QEMUMonitorProtocol:
"""
Close the socket and socket file.
"""
self.__sock.close()
self.__sockfile.close()
if self.__sock:
self.__sock.close()
if self.__sockfile:
self.__sockfile.close()
def settimeout(self, timeout):
"""