On Fri, Jan 26, 2024 at 09:30:29AM +0100, Peter Krempa wrote: > On Thu, Jan 25, 2024 at 09:06:54 -0800, Andrea Bolognani wrote: > > I've never seen the 'raise Foo() from None' pattern though. Can you > > explain why it's needed here? > > Python would re-raise the original exception along with the new one > without that. I guess it doesn't hurt to have it there, but it doesn't seem very useful either: $ git diff diff --git a/scripts/qemu-replies-tool.py b/scripts/qemu-replies-tool.py index 9ab1c30ee2..bde6b2dad5 100755 --- a/scripts/qemu-replies-tool.py +++ b/scripts/qemu-replies-tool.py @@ -46,7 +46,7 @@ def qemu_replies_load(filename): jsonstr = '' except json.decoder.JSONDecodeError as je: - raise qrtException("JSON error:\n'%s'\nwhile processing snippet:\n'%s'" % (je, jsonstr)) from None + raise qrtException("JSON error:\n'%s'\nwhile processing snippet:\n'%s'" % (je, jsonstr)) if command is not None or jsonstr != '': if command is not None: diff --git a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies index cc2190dfd3..cf1425e0bb 100644 --- a/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies @@ -1,5 +1,5 @@ { - "execute": "qmp_capabilities", + "execute": } "qmp_capabilities", "id": "libvirt-1" } $ ./scripts/qemu-replies-tool.py tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies 'tests/qemucapabilitiesdata/caps_8.2.0_x86_64.replies' ... FAIL JSON error: 'Expecting value: line 2 column 14 (char 15)' while processing snippet: '{ "execute": } "qmp_capabilities", "id": "libvirt-1" } ' The behavior without it is just the same AFAICT. > > The way these examples are all jumbled together makes it IMO a lot > > harder to understand what each is supposed to do, or even where one > > ends and the next one starts. I suggest you do something like this > > instead: > > > > def modify_replies(conv): > > return # no changes > > > > def _modify_replies_example1(conv): > > # ... > > > > def _modify_replies_example2(conv): > > # ... > > The above is really just one example though: > - it shows version lookup > - lookup of a command in the replies list > - insertion of a new command into the list: > - if the version doesn't match > - add an error > - if the version does match > - add the real data > > The above is a common pattern if you want to add probe for a new device. > > It just shows two distinct (but with a reason) versions how to get the > JSON data. The first one is constructing it manually in python, which is > reasonable for the command or error. The second one is loading it from a > JSON string you'd copy&paste from qemu. Okay, I clearly completely misunderstood what the code was trying to do, arguably proving that it's not as obvious to someone else as it certainly is to you :) It's fine to keep the function as is, but please add some comments explaining what it does and why. Some variation of the above will do nicely. > > Honestly I would prefer it if the way to make the script process > > multiple files was just to list them all on the command line, but I > > I think this is simple thing to do with the argument parser in python Oh, absolutely! It's just a shame that we can't do things that way because of meson. -- Andrea Bolognani / Red Hat / Virtualization _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx