All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Niteesh G . S ." <niteesh.gs@gmail.com>,
	Cleber Rosa <crosa@redhat.com>, John Snow <jsnow@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>
Subject: [PATCH 39/42] scripts/qmp-shell: add docstrings
Date: Mon,  7 Jun 2021 16:06:46 -0400	[thread overview]
Message-ID: <20210607200649.1840382-40-jsnow@redhat.com> (raw)
In-Reply-To: <20210607200649.1840382-1-jsnow@redhat.com>

Signed-off-by: John Snow <jsnow@redhat.com>
---
 scripts/qmp/qmp-shell | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 1a8a4ba18a..15aedb80c2 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -106,15 +106,20 @@ LOG = logging.getLogger(__name__)
 
 
 class QMPCompleter:
+    """
+    QMPCompleter provides a readline library tab-complete behavior.
+    """
     # NB: Python 3.9+ will probably allow us to subclass list[str] directly,
     # but pylint as of today does not know that List[str] is simply 'list'.
     def __init__(self) -> None:
         self._matches: List[str] = []
 
     def append(self, value: str) -> None:
+        """Append a new valid completion to the list of possibilities."""
         return self._matches.append(value)
 
     def complete(self, text: str, state: int) -> Optional[str]:
+        """readline.set_completer() callback implementation."""
         for cmd in self._matches:
             if cmd.startswith(text):
                 if state == 0:
@@ -124,7 +129,9 @@ class QMPCompleter:
 
 
 class QMPShellError(qmp.QMPError):
-    pass
+    """
+    QMP Shell Base error class.
+    """
 
 
 class FuzzyJSON(ast.NodeTransformer):
@@ -137,6 +144,9 @@ class FuzzyJSON(ast.NodeTransformer):
     @classmethod
     def visit_Name(cls,  # pylint: disable=invalid-name
                    node: ast.Name) -> ast.AST:
+        """
+        Transform Name nodes with certain values into Constant (keyword) nodes.
+        """
         if node.id == 'true':
             return ast.Constant(value=True)
         if node.id == 'false':
@@ -147,6 +157,13 @@ class FuzzyJSON(ast.NodeTransformer):
 
 
 class QMPShell(qmp.QEMUMonitorProtocol):
+    """
+    QMPShell provides a basic readline-based QMP shell.
+
+    :param address: Address of the QMP server.
+    :param pretty: Pretty-print QMP messages.
+    :param verbose: Echo outgoing QMP messages to console.
+    """
     def __init__(self, address: qmp.SocketAddrT,
                  pretty: bool = False, verbose: bool = False):
         super().__init__(address)
@@ -333,6 +350,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
 
     def show_banner(self,
                     msg: str = 'Welcome to the QMP low-level shell!') -> None:
+        """
+        Print to stdio a greeting, and the QEMU version if available.
+        """
         print(msg)
         if not self._greeting:
             print('Connected')
@@ -342,6 +362,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
 
     @property
     def prompt(self) -> str:
+        """
+        Return the current shell prompt, including a trailing space.
+        """
         if self._transmode:
             return 'TRANS> '
         return '(QEMU) '
@@ -367,6 +390,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
         return self._execute_cmd(cmdline)
 
     def repl(self) -> Iterator[None]:
+        """
+        Return an iterator that implements the REPL.
+        """
         self.show_banner()
         while self.read_exec_command():
             yield
@@ -374,6 +400,13 @@ class QMPShell(qmp.QEMUMonitorProtocol):
 
 
 class HMPShell(QMPShell):
+    """
+    HMPShell provides a basic readline-based HMP shell, tunnelled via QMP.
+
+    :param address: Address of the QMP server.
+    :param pretty: Pretty-print QMP messages.
+    :param verbose: Echo outgoing QMP messages to console.
+    """
     def __init__(self, address: qmp.SocketAddrT,
                  pretty: bool = False, verbose: bool = False):
         super().__init__(address, pretty, verbose)
@@ -451,11 +484,15 @@ class HMPShell(QMPShell):
 
 
 def die(msg: str) -> NoReturn:
+    """Write an error to stderr, then exit with a return code of 1."""
     sys.stderr.write('ERROR: %s\n' % msg)
     sys.exit(1)
 
 
 def main() -> None:
+    """
+    qmp-shell entry point: parse command line arguments and start the REPL.
+    """
     parser = argparse.ArgumentParser()
     parser.add_argument('-H', '--hmp', action='store_true',
                         help='Use HMP interface')
-- 
2.31.1



  parent reply	other threads:[~2021-06-07 20:28 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-07 20:06 [PATCH 00/42] python: move qmp-shell into qemu.qmp package John Snow
2021-06-07 20:06 ` [PATCH 01/42] scripts/qmp-shell: apply isort rules John Snow
2021-06-07 20:06 ` [PATCH 02/42] scripts/qmp-shell: Apply flake8 rules John Snow
2021-06-07 20:06 ` [PATCH 03/42] scripts/qmp-shell: fix show_banner signature John Snow
2021-06-07 20:06 ` [PATCH 04/42] scripts/qmp-shell: fix exception handling John Snow
2021-06-07 20:06 ` [PATCH 05/42] scripts/qmp-shell: fix connect method signature John Snow
2021-06-07 20:06 ` [PATCH 06/42] scripts/qmp-shell: remove shadowed variable from _print() John Snow
2021-06-07 20:06 ` [PATCH 07/42] scripts/qmp-shell: use @classmethod where appropriate John Snow
2021-06-07 20:06 ` [PATCH 08/42] scripts/qmp-shell: Use python3-style super() John Snow
2021-06-07 20:06 ` [PATCH 09/42] scripts/qmp-shell: declare verbose in __init__ John Snow
2021-06-07 20:06 ` [PATCH 10/42] scripts/qmp-shell: use triple-double-quote docstring style John Snow
2021-06-07 20:06 ` [PATCH 11/42] scripts/qmp-shell: ignore visit_Name name John Snow
2021-06-07 20:06 ` [PATCH 12/42] scripts/qmp-shell: make QMPCompleter returns explicit John Snow
2021-06-07 20:06 ` [PATCH 13/42] scripts/qmp-shell: rename one and two-letter variables John Snow
2021-06-07 20:06 ` [PATCH 14/42] scripts/qmp-shell: fix shell history exception handling John Snow
2021-06-07 20:06 ` [PATCH 15/42] scripts/qmp-shell: remove if-raise-else patterns John Snow
2021-06-07 20:06 ` [PATCH 16/42] scripts/qmp-shell: use isinstance() instead of type() John Snow
2021-06-07 20:06 ` [PATCH 17/42] scripts/qmp-shell: use argparse John Snow
2021-06-07 20:06 ` [PATCH 18/42] scripts/qmp-shell: Add pretty attribute to HMP shell John Snow
2021-06-07 20:06 ` [PATCH 19/42] scripts/qmp-shell: Make verbose a public attribute John Snow
2021-06-07 20:06 ` [PATCH 20/42] scripts/qmp-shell: move get_prompt() to prompt property John Snow
2021-06-07 20:06 ` [PATCH 21/42] scripts/qmp-shell: remove prompt argument from read_exec_command John Snow
2021-06-07 20:06 ` [PATCH 22/42] scripts/qmp-shell: move the REPL functionality into QMPShell John Snow
2021-06-07 20:06 ` [PATCH 23/42] scripts/qmp-shell: Fix "FuzzyJSON" parser John Snow
2021-06-07 20:06 ` [PATCH 24/42] scripts/qmp-shell: refactor QMPCompleter John Snow
2021-06-07 20:06 ` [PATCH 25/42] scripts/qmp-shell: initialize completer early John Snow
2021-06-07 20:06 ` [PATCH 26/42] python/qmp: add QMPObject type alias John Snow
2021-06-07 20:06 ` [PATCH 27/42] scripts/qmp-shell: add mypy types John Snow
2021-06-07 20:06 ` [PATCH 28/42] scripts/qmp-shell: Accept SocketAddrT instead of string John Snow
2021-06-07 20:06 ` [PATCH 29/42] scripts/qmp-shell: unprivatize 'pretty' property John Snow
2021-06-07 20:06 ` [PATCH 30/42] python/qmp: return generic type from context manager John Snow
2021-06-07 20:06 ` [PATCH 31/42] scripts/qmp-shell: Use context manager instead of atexit John Snow
2021-06-07 20:06 ` [PATCH 32/42] scripts/qmp-shell: use logging to show warnings John Snow
2021-06-07 20:06 ` [PATCH 33/42] scripts/qmp-shell: remove TODO John Snow
2021-06-07 20:06 ` [PATCH 34/42] scripts/qmp-shell: Fix empty-transaction invocation John Snow
2021-06-07 20:06 ` [PATCH 35/42] scripts/qmp-shell: Remove too-broad-exception John Snow
2021-06-07 20:06 ` [PATCH 36/42] scripts/qmp-shell: convert usage comment to docstring John Snow
2021-06-07 20:06 ` [PATCH 37/42] scripts/qmp-shell: remove double-underscores John Snow
2021-06-07 20:06 ` [PATCH 38/42] scripts/qmp-shell: make QMPShellError inherit QMPError John Snow
2021-06-07 20:06 ` John Snow [this message]
2021-06-07 20:06 ` [PATCH 40/42] scripts/qmp-shell: move to python/qemu/qmp/qmp_shell.py John Snow
2021-06-07 20:06 ` [PATCH 41/42] python: add qmp-shell entry point John Snow
2021-06-07 20:06 ` [PATCH 42/42] scripts/qmp-shell: add redirection shim John Snow
2021-06-14 18:09 ` [PATCH 00/42] python: move qmp-shell into qemu.qmp package 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=20210607200649.1840382-40-jsnow@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=niteesh.gs@gmail.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.