All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Daniel Berrange <berrange@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	qemu-block@nongnu.org, qemu-devel <qemu-devel@nongnu.org>,
	Markus Armbruster <armbru@redhat.com>,
	Cleber Rosa <crosa@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Max Reitz <mreitz@redhat.com>, Eric Blake <eblake@redhat.com>
Subject: Re: [PATCH v7 25/33] iotests.py: VM: add own __enter__ method
Date: Wed, 4 Aug 2021 12:27:25 -0400	[thread overview]
Message-ID: <CAFn=p-bFQvAnBypxqO7HUob+JJk=d1tp0juJXzdfU6yK7O_Xvw@mail.gmail.com> (raw)
In-Reply-To: <20210804093813.20688-26-vsementsov@virtuozzo.com>

[-- Attachment #1: Type: text/plain, Size: 2559 bytes --]

On Wed, Aug 4, 2021 at 5:39 AM Vladimir Sementsov-Ogievskiy <
vsementsov@virtuozzo.com> wrote:

> In superclass __enter__ method is defined with return value type hint
> 'QEMUMachine'. So, mypy thinks that return value of VM.__enter__ is
> QEMUMachine. Let's redefine __enter__ in VM class, to give it correct
> type hint.
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> Reviewed-by: Max Reitz <mreitz@redhat.com>
> ---
>  tests/qemu-iotests/iotests.py | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> index 89663dac06..025e288ddd 100644
> --- a/tests/qemu-iotests/iotests.py
> +++ b/tests/qemu-iotests/iotests.py
> @@ -568,6 +568,10 @@ def remote_filename(path):
>  class VM(qtest.QEMUQtestMachine):
>      '''A QEMU VM'''
>
> +    # Redefine __enter__ with proper type hint
> +    def __enter__(self) -> 'VM':
> +        return self
> +
>      def __init__(self, path_suffix=''):
>          name = "qemu%s-%d" % (path_suffix, os.getpid())
>          super().__init__(qemu_prog, qemu_opts, name=name,
> --
> 2.29.2
>

First and foremost:

Reviewed-by: John Snow <jsnow@redhat.com>
Acked-by: John Snow <jsnow@redhat.com>

A more durable approach might be to annotate QEMUMachine differently such
that subclasses get the right types automatically. See if this following
snippet works instead of adding a new __enter__ method.

diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py
index 971ed7e8c6a..2e410103569 100644
--- a/python/qemu/machine/machine.py
+++ b/python/qemu/machine/machine.py
@@ -36,6 +36,7 @@
     Sequence,
     Tuple,
     Type,
+    TypeVar,
 )

 from qemu.qmp import (  # pylint: disable=import-error
@@ -73,6 +74,9 @@ class AbnormalShutdown(QEMUMachineError):
     """


+_T = TypeVar('_T', bound='QEMUMachine')
+
+
 class QEMUMachine:
     """
     A QEMU VM.
@@ -166,7 +170,7 @@ def __init__(self,
         self._remove_files: List[str] = []
         self._user_killed = False

-    def __enter__(self) -> 'QEMUMachine':
+    def __enter__(self: _T) -> _T:
         return self

     def __exit__(self,
@@ -182,8 +186,8 @@ def add_monitor_null(self) -> None:
         self._args.append('-monitor')
         self._args.append('null')

-    def add_fd(self, fd: int, fdset: int,
-               opaque: str, opts: str = '') -> 'QEMUMachine':
+    def add_fd(self: _T, fd: int, fdset: int,
+               opaque: str, opts: str = '') -> _T:
         """
         Pass a file descriptor to the VM
         """

[-- Attachment #2: Type: text/html, Size: 3779 bytes --]

  reply	other threads:[~2021-08-04 18:24 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-04  9:37 [PATCH v7 00/33] block: publish backup-top filter Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 01/33] block: introduce bdrv_replace_child_bs() Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 02/33] block: introduce blk_replace_bs Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 03/33] qdev-properties: PropertyInfo: add realized_set_allowed field Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 04/33] qdev: allow setting drive property for realized device Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 05/33] block: rename backup-top to copy-before-write Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 06/33] block-copy: move detecting fleecing scheme to block-copy Vladimir Sementsov-Ogievskiy
2021-08-10 14:44   ` Hanna Reitz
2021-08-04  9:37 ` [PATCH v7 07/33] block/block-copy: introduce block_copy_set_copy_opts() Vladimir Sementsov-Ogievskiy
2021-08-10 14:55   ` Hanna Reitz
2021-08-23 12:05     ` Vladimir Sementsov-Ogievskiy
2021-08-23 17:40       ` Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 08/33] block/backup: set copy_range and compress after filter insertion Vladimir Sementsov-Ogievskiy
2021-08-10 15:07   ` Hanna Reitz
2021-08-04  9:37 ` [PATCH v7 09/33] block/backup: move cluster size calculation to block-copy Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 10/33] block/copy-before-write: relax permission requirements when no parents Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 11/33] block/copy-before-write: drop extra bdrv_unref on failure path Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 12/33] block/copy-before-write: use file child instead of backing Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 13/33] block/copy-before-write: bdrv_cbw_append(): replace child at last Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 14/33] block/copy-before-write: introduce cbw_init() Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 15/33] block/copy-before-write: cbw_init(): rename variables Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 16/33] block/copy-before-write: cbw_init(): use file child after attaching Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 17/33] block/copy-before-write: bdrv_cbw_append(): drop unused compress arg Vladimir Sementsov-Ogievskiy
2021-08-10 15:17   ` Hanna Reitz
2021-08-23 16:33     ` Vladimir Sementsov-Ogievskiy
2021-08-04  9:37 ` [PATCH v7 18/33] block/copy-before-write: cbw_init(): use options Vladimir Sementsov-Ogievskiy
2021-08-10 15:18   ` Hanna Reitz
2021-08-04  9:37 ` [PATCH v7 19/33] block/copy-before-write: initialize block-copy bitmap Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 20/33] block/block-copy: make setting progress optional Vladimir Sementsov-Ogievskiy
2021-08-10 15:23   ` Hanna Reitz
2021-08-04  9:38 ` [PATCH v7 21/33] block/copy-before-write: make public block driver Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 22/33] qapi: publish copy-before-write filter Vladimir Sementsov-Ogievskiy
2021-08-04 13:18   ` Markus Armbruster
2021-08-04  9:38 ` [PATCH v7 23/33] python/qemu/machine.py: refactor _qemu_args() Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 24/33] python/qemu/machine: QEMUMachine: improve qmp() method Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 25/33] iotests.py: VM: add own __enter__ method Vladimir Sementsov-Ogievskiy
2021-08-04 16:27   ` John Snow [this message]
2021-08-23 17:22     ` Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 26/33] iotests/222: fix pylint and mypy complains Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 27/33] iotests/222: constantly use single quotes for strings Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 28/33] iotests: move 222 to tests/image-fleecing Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 29/33] iotests.py: hmp_qemu_io: support qdev Vladimir Sementsov-Ogievskiy
2021-08-04 16:17   ` John Snow
2021-08-04  9:38 ` [PATCH v7 30/33] iotests/image-fleecing: proper source device Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 31/33] iotests/image-fleecing: rename tgt_node Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 32/33] iotests/image-fleecing: prepare for adding new test-case Vladimir Sementsov-Ogievskiy
2021-08-04  9:38 ` [PATCH v7 33/33] iotests/image-fleecing: add test-case for copy-before-write filter Vladimir Sementsov-Ogievskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAFn=p-bFQvAnBypxqO7HUob+JJk=d1tp0juJXzdfU6yK7O_Xvw@mail.gmail.com' \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=crosa@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.