[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 23/42] scripts/qmp-shell: Fix "FuzzyJSON" parser
From: |
John Snow |
Subject: |
[PATCH 23/42] scripts/qmp-shell: Fix "FuzzyJSON" parser |
Date: |
Mon, 7 Jun 2021 16:06:30 -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>
---
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
- [PATCH 18/42] scripts/qmp-shell: Add pretty attribute to HMP shell, (continued)
- [PATCH 18/42] scripts/qmp-shell: Add pretty attribute to HMP shell, John Snow, 2021/06/07
- [PATCH 15/42] scripts/qmp-shell: remove if-raise-else patterns, John Snow, 2021/06/07
- [PATCH 29/42] scripts/qmp-shell: unprivatize 'pretty' property, John Snow, 2021/06/07
- [PATCH 19/42] scripts/qmp-shell: Make verbose a public attribute, John Snow, 2021/06/07
- [PATCH 25/42] scripts/qmp-shell: initialize completer early, John Snow, 2021/06/07
- [PATCH 27/42] scripts/qmp-shell: add mypy types, John Snow, 2021/06/07
- [PATCH 24/42] scripts/qmp-shell: refactor QMPCompleter, John Snow, 2021/06/07
- [PATCH 16/42] scripts/qmp-shell: use isinstance() instead of type(), John Snow, 2021/06/07
- [PATCH 30/42] python/qmp: return generic type from context manager, John Snow, 2021/06/07
- [PATCH 33/42] scripts/qmp-shell: remove TODO, John Snow, 2021/06/07
- [PATCH 23/42] scripts/qmp-shell: Fix "FuzzyJSON" parser,
John Snow <=
- [PATCH 35/42] scripts/qmp-shell: Remove too-broad-exception, John Snow, 2021/06/07
- [PATCH 26/42] python/qmp: add QMPObject type alias, John Snow, 2021/06/07
- [PATCH 13/42] scripts/qmp-shell: rename one and two-letter variables, John Snow, 2021/06/07
- [PATCH 28/42] scripts/qmp-shell: Accept SocketAddrT instead of string, John Snow, 2021/06/07
- [PATCH 22/42] scripts/qmp-shell: move the REPL functionality into QMPShell, John Snow, 2021/06/07
- [PATCH 32/42] scripts/qmp-shell: use logging to show warnings, John Snow, 2021/06/07
- [PATCH 34/42] scripts/qmp-shell: Fix empty-transaction invocation, John Snow, 2021/06/07
- [PATCH 31/42] scripts/qmp-shell: Use context manager instead of atexit, John Snow, 2021/06/07
- [PATCH 17/42] scripts/qmp-shell: use argparse, John Snow, 2021/06/07
- [PATCH 36/42] scripts/qmp-shell: convert usage comment to docstring, John Snow, 2021/06/07