[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser
From: |
John Snow |
Subject: |
[PATCH v2 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser |
Date: |
Tue, 3 Nov 2020 19:35:43 -0500 |
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 aa148517a864..847d34890f97 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.26.2
- [PATCH v2 44/72] scripts/qmp-shell: use isinstance() instead of type(), (continued)
- [PATCH v2 44/72] scripts/qmp-shell: use isinstance() instead of type(), John Snow, 2020/11/03
- [PATCH v2 45/72] scripts/qmp-shell: use argparse, John Snow, 2020/11/03
- [PATCH v2 46/72] python/qmp: Fix type of SocketAddrT, John Snow, 2020/11/03
- [PATCH v2 38/72] scripts/qmp-shell: ignore visit_Name name, John Snow, 2020/11/03
- [PATCH v2 47/72] python/qmp: add parse_address classmethod, John Snow, 2020/11/03
- [PATCH v2 48/72] scripts/qmp-shell: Add pretty attribute to HMP shell, John Snow, 2020/11/03
- [PATCH v2 49/72] scripts/qmp-shell: Make verbose a public attribute, John Snow, 2020/11/03
- [PATCH v2 50/72] scripts/qmp-shell: move get_prompt() to prompt property, John Snow, 2020/11/03
- [PATCH v2 51/72] scripts/qmp-shell: remove prompt argument from read_exec_command, John Snow, 2020/11/03
- [PATCH v2 52/72] scripts/qmp-shell: move the REPL functionality into QMPShell, John Snow, 2020/11/03
- [PATCH v2 53/72] scripts/qmp-shell: Fix "FuzzyJSON" parser,
John Snow <=
- [PATCH v2 54/72] scripts/qmp-shell: refactor QMPCompleter, John Snow, 2020/11/03
- [PATCH v2 56/72] python/qmp: add QMPObject type alias, John Snow, 2020/11/03
- [PATCH v2 59/72] scripts/qmp-shell: unprivatize 'pretty' property, John Snow, 2020/11/03
- [PATCH v2 58/72] scripts/qmp-shell: Accept SocketAddrT instead of string, John Snow, 2020/11/03
- [PATCH v2 55/72] scripts/qmp-shell: initialize completer early, John Snow, 2020/11/03
- [PATCH v2 61/72] scripts/qmp-shell: Use context manager instead of atexit, John Snow, 2020/11/03
- [PATCH v2 62/72] scripts/qmp-shell: use logging to show warnings, John Snow, 2020/11/03
- [PATCH v2 65/72] scripts/qmp-shell: Remove too-broad-exception, John Snow, 2020/11/03
- [PATCH v2 66/72] scripts/qmp-shell: convert usage comment to docstring, John Snow, 2020/11/03
- [PATCH v2 63/72] scripts/qmp-shell: remove TODO, John Snow, 2020/11/03