All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: Markus Armbruster <armbru@redhat.com>,
	John Snow <jsnow@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Cleber Rosa <crosa@redhat.com>
Subject: [PATCH 12/15] scripts/qom-fuse: add static type hints
Date: Wed, 21 Oct 2020 14:52:05 -0400	[thread overview]
Message-ID: <20201021185208.1611145-13-jsnow@redhat.com> (raw)
In-Reply-To: <20201021185208.1611145-1-jsnow@redhat.com>

Because fusepy does not have type hints, add some targeted warning
suppressions.

NOTE: Prior to this change, running 'mypy qemu' from the python
directory worked OK, but only coincidentally. Going forward, you will
need to run 'mypy -p qemu' instead. These invocation forms will be
codified in a CI test soon.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 python/setup.cfg     |  8 ++++++++
 scripts/qmp/qom-fuse | 26 +++++++++++++++++---------
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/python/setup.cfg b/python/setup.cfg
index 58cf48aaed..9592ac91df 100755
--- a/python/setup.cfg
+++ b/python/setup.cfg
@@ -35,6 +35,14 @@ python_version = 3.6
 warn_unused_configs = True
 namespace_packages = True
 
+[mypy-qemu.qmp.qom_fuse]
+# fusepy has no type stubs:
+allow_subclassing_any = True
+
+[mypy-fuse]
+# fusepy has no type stubs:
+ignore_missing_imports = True
+
 [pylint.messages control]
 # Disable the message, report, category or checker with the given id(s). You
 # can either give multiple identifiers separated by comma (,) or put this
diff --git a/scripts/qmp/qom-fuse b/scripts/qmp/qom-fuse
index b120b93391..22be366349 100755
--- a/scripts/qmp/qom-fuse
+++ b/scripts/qmp/qom-fuse
@@ -39,7 +39,14 @@ from errno import ENOENT, EPERM
 import os
 import stat
 import sys
-from typing import Dict
+from typing import (
+    IO,
+    Dict,
+    Iterator,
+    Mapping,
+    Optional,
+    Union,
+)
 
 import fuse
 from fuse import FUSE, FuseOSError, Operations
@@ -84,7 +91,7 @@ class QOMFuse(QOMCommand, Operations):
         self.fuse = FUSE(self, self.mount, foreground=True)
         return 0
 
-    def get_ino(self, path):
+    def get_ino(self, path: str) -> int:
         """Get an inode number for a given QOM path."""
         if path in self.ino_map:
             return self.ino_map[path]
@@ -92,7 +99,7 @@ class QOMFuse(QOMCommand, Operations):
         self.ino_count += 1
         return self.ino_map[path]
 
-    def is_object(self, path):
+    def is_object(self, path: str) -> bool:
         """Is the given QOM path an object?"""
         try:
             self.qom_list(path)
@@ -100,7 +107,7 @@ class QOMFuse(QOMCommand, Operations):
         except QMPResponseError:
             return False
 
-    def is_property(self, path):
+    def is_property(self, path: str) -> bool:
         """Is the given QOM path a property?"""
         path, prop = path.rsplit('/', 1)
         if path == '':
@@ -113,7 +120,7 @@ class QOMFuse(QOMCommand, Operations):
         except QMPResponseError:
             return False
 
-    def is_link(self, path):
+    def is_link(self, path: str) -> bool:
         """Is the given QOM path a link?"""
         path, prop = path.rsplit('/', 1)
         if path == '':
@@ -126,7 +133,7 @@ class QOMFuse(QOMCommand, Operations):
         except QMPResponseError:
             return False
 
-    def read(self, path, size, offset, fh):
+    def read(self, path: str, size: int, offset: int, fh: IO[bytes]) -> bytes:
         if not self.is_property(path):
             raise FuseOSError(ENOENT)
 
@@ -144,7 +151,7 @@ class QOMFuse(QOMCommand, Operations):
 
         return bytes(data[offset:][:size], encoding='utf-8')
 
-    def readlink(self, path):
+    def readlink(self, path: str) -> Union[bool, str]:
         if not self.is_link(path):
             return False
         path, prop = path.rsplit('/', 1)
@@ -152,7 +159,8 @@ class QOMFuse(QOMCommand, Operations):
         return prefix + str(self.qmp.command('qom-get', path=path,
                                              property=prop))
 
-    def getattr(self, path, fh=None):
+    def getattr(self, path: str,
+                fh: Optional[IO[bytes]] = None) -> Mapping[str, object]:
         if self.is_link(path):
             value = {
                 'st_mode': 0o755 | stat.S_IFLNK,
@@ -196,7 +204,7 @@ class QOMFuse(QOMCommand, Operations):
             raise FuseOSError(ENOENT)
         return value
 
-    def readdir(self, path, fh):
+    def readdir(self, path: str, fh: IO[bytes]) -> Iterator[str]:
         yield '.'
         yield '..'
         for item in self.qom_list(path):
-- 
2.26.2



  parent reply	other threads:[~2020-10-21 18:59 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-21 18:51 [PATCH 00/15] python: absorb scripts/qmp/qom-* tooling John Snow
2020-10-21 18:51 ` [PATCH 01/15] python/qmp: Add qom script rewrites John Snow
2020-10-21 18:51 ` [PATCH 02/15] python/qmp: add qom script entry points John Snow
2020-10-24 20:00   ` Philippe Mathieu-Daudé
2020-10-21 18:51 ` [PATCH 03/15] scripts/qmp: redirect qom-xxx scripts to python/qemu/qmp/ John Snow
2020-10-24 19:59   ` Philippe Mathieu-Daudé
2020-10-21 18:51 ` [PATCH 04/15] scripts/qom-fuse: apply isort rules John Snow
2020-10-24 19:58   ` Philippe Mathieu-Daudé
2020-10-21 18:51 ` [PATCH 05/15] scripts/qom-fuse: apply flake8 rules John Snow
2020-10-21 18:51 ` [PATCH 06/15] python: Add 'fh' to known-good variable names John Snow
2020-10-21 18:52 ` [PATCH 07/15] scripts/qom-fuse: Apply pylint rules John Snow
2020-10-24 19:57   ` Philippe Mathieu-Daudé
2020-10-21 18:52 ` [PATCH 08/15] scripts/qom-fuse: Add docstrings John Snow
2020-10-21 18:52 ` [PATCH 09/15] scripts/qom-fuse: Convert to QOMCommand John Snow
2020-10-21 18:52 ` [PATCH 10/15] scripts/qom-fuse: use QOMCommand.qom_list() John Snow
2020-10-21 18:52 ` [PATCH 11/15] scripts/qom-fuse: ensure QOMFuse.read always returns bytes John Snow
2020-10-24 19:55   ` Philippe Mathieu-Daudé
2020-10-21 18:52 ` John Snow [this message]
2020-10-21 18:52 ` [PATCH 13/15] scripts/qom-fuse: move to python/qemu/qmp/qom_fuse.py John Snow
2020-10-24 19:56   ` Philippe Mathieu-Daudé
2020-10-21 18:52 ` [PATCH 14/15] scripts/qom-fuse: add redirection shim to python/qemu/qmp/qom-fuse.py John Snow
2020-10-24 19:56   ` Philippe Mathieu-Daudé
2020-10-21 18:52 ` [PATCH 15/15] python: add fuse command to 'qom' tools John Snow
2020-11-04  0:38 ` [PATCH 00/15] python: absorb scripts/qmp/qom-* tooling John Snow

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=20201021185208.1611145-13-jsnow@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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.