Commit 07608e80 authored by Wainer dos Santos Moschetta's avatar Wainer dos Santos Moschetta Committed by Philippe Mathieu-Daudé
Browse files

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: default avatarWainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: default avatarJohn Snow <jsnow@redhat.com>
Message-Id: <20200204141111.3207-5-wainersm@redhat.com>
Signed-off-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
parent 54aafc2f
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -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,7 +274,9 @@ class QEMUMonitorProtocol:
        """
        Close the socket and socket file.
        """
        if self.__sock:
            self.__sock.close()
        if self.__sockfile:
            self.__sockfile.close()

    def settimeout(self, timeout):