[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser
From: |
John Snow |
Subject: |
[PULL 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser |
Date: |
Fri, 18 Jun 2021 19:04:36 -0400 |
I'm not sure when this regressed (Or maybe if it was ever working right
to begin with?), but the Python AST requires you to change "Names" to
"Constants" in order to truly convert `false` to `False`.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20210607200649.1840382-24-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qmp/qmp-shell | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index aa148517a8..847d34890f 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -95,18 +95,19 @@ class QMPShellError(Exception):
class FuzzyJSON(ast.NodeTransformer):
"""
This extension of ast.NodeTransformer filters literal "true/false/null"
- values in an AST and replaces them by proper "True/False/None" values that
- Python can properly evaluate.
+ values in a Python AST and replaces them by proper "True/False/None" values
+ that Python can properly evaluate.
"""
@classmethod
- def visit_Name(cls, node): # pylint: disable=invalid-name
+ def visit_Name(cls, # pylint: disable=invalid-name
+ node: ast.Name) -> ast.AST:
if node.id == 'true':
- node.id = 'True'
+ return ast.Constant(value=True)
if node.id == 'false':
- node.id = 'False'
+ return ast.Constant(value=False)
if node.id == 'null':
- node.id = 'None'
+ return ast.Constant(value=None)
return node
@@ -174,10 +175,9 @@ class QMPShell(qmp.QEMUMonitorProtocol):
# Try once again as FuzzyJSON:
try:
tree = ast.parse(val, mode='eval')
- return ast.literal_eval(FuzzyJSON().visit(tree))
- except SyntaxError:
- pass
- except ValueError:
+ transformed = FuzzyJSON().visit(tree)
+ return ast.literal_eval(transformed)
+ except (SyntaxError, ValueError):
pass
return val
--
2.31.1
- [PULL 39/72] scripts/qmp-shell: declare verbose in __init__, (continued)
- [PULL 39/72] scripts/qmp-shell: declare verbose in __init__, John Snow, 2021/06/18
- [PULL 40/72] scripts/qmp-shell: use triple-double-quote docstring style, John Snow, 2021/06/18
- [PULL 41/72] scripts/qmp-shell: ignore visit_Name name, John Snow, 2021/06/18
- [PULL 42/72] scripts/qmp-shell: make QMPCompleter returns explicit, John Snow, 2021/06/18
- [PULL 50/72] scripts/qmp-shell: move get_prompt() to prompt property, John Snow, 2021/06/18
- [PULL 23/72] scripts/qemu-ga-client: replace deprecated optparse with argparse, John Snow, 2021/06/18
- [PULL 25/72] scripts/qemu-ga-client: apply (most) pylint rules, John Snow, 2021/06/18
- [PULL 24/72] scripts/qemu-ga-client: add module docstring, John Snow, 2021/06/18
- [PULL 34/72] scripts/qmp-shell: fix exception handling, John Snow, 2021/06/18
- [PULL 51/72] scripts/qmp-shell: remove prompt argument from read_exec_command, John Snow, 2021/06/18
- [PULL 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser,
John Snow <=
- [PULL 54/72] scripts/qmp-shell: refactor QMPCompleter, John Snow, 2021/06/18
- [PULL 52/72] scripts/qmp-shell: move the REPL functionality into QMPShell, John Snow, 2021/06/18
- [PULL 47/72] scripts/qmp-shell: use argparse, John Snow, 2021/06/18
- [PULL 45/72] scripts/qmp-shell: remove if-raise-else patterns, John Snow, 2021/06/18
- [PULL 55/72] scripts/qmp-shell: initialize completer early, John Snow, 2021/06/18
- [PULL 56/72] python/qmp: add QMPObject type alias, John Snow, 2021/06/18
- [PULL 57/72] scripts/qmp-shell: add mypy types, John Snow, 2021/06/18
- [PULL 59/72] scripts/qmp-shell: unprivatize 'pretty' property, John Snow, 2021/06/18
- [PULL 60/72] python/qmp: return generic type from context manager, John Snow, 2021/06/18
- [PULL 64/72] scripts/qmp-shell: Fix empty-transaction invocation, John Snow, 2021/06/18