On Thu, Oct 30, 2025 at 10:26:38AM +0100, Thomas Huth wrote:
> From: Thomas Huth <[email protected]>
>
> The argparse.FileType() type has been deprecated in the latest argparse
> version (e.g. the one from Fedora 43), now causing the test_bad_vmstate
> functional test to fail since there are unexpected strings in the output.
> Change the script to use pathlib.Path instead to fix the test_bad_vmstate
> test and to be prepared for the future when the deprecated FileType gets
> removed completely.
>
> Reported-by: Daniel P. Berrangé <[email protected]>
> Signed-off-by: Thomas Huth <[email protected]>
> ---
> scripts/vmstate-static-checker.py | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
AFAICT, using pathlib.Path should work going back to any old python
versions we would need.
>
> diff --git a/scripts/vmstate-static-checker.py
> b/scripts/vmstate-static-checker.py
> index 2335e25f94c..89b100e6cca 100755
> --- a/scripts/vmstate-static-checker.py
> +++ b/scripts/vmstate-static-checker.py
> @@ -21,6 +21,7 @@
>
> import argparse
> import json
> +import pathlib
> import sys
>
> # Count the number of errors found
> @@ -382,10 +383,10 @@ def main():
> help_text = "Parse JSON-formatted vmstate dumps from QEMU in files SRC
> and DEST. Checks whether migration from SRC to DEST QEMU versions would
> break based on the VMSTATE information contained within the JSON outputs.
> The JSON output is created from a QEMU invocation with the -dump-vmstate
> parameter and a filename argument to it. Other parameters to QEMU do not
> matter, except the -M (machine type) parameter."
>
> parser = argparse.ArgumentParser(description=help_text)
> - parser.add_argument('-s', '--src', type=argparse.FileType('r'),
> + parser.add_argument('-s', '--src', type=pathlib.Path,
> required=True,
> help='json dump from src qemu')
> - parser.add_argument('-d', '--dest', type=argparse.FileType('r'),
> + parser.add_argument('-d', '--dest', type=pathlib.Path,
> required=True,
> help='json dump from dest qemu')
> parser.add_argument('--reverse', required=False, default=False,
> @@ -393,10 +394,10 @@ def main():
> help='reverse the direction')
> args = parser.parse_args()
>
> - src_data = json.load(args.src)
> - dest_data = json.load(args.dest)
> - args.src.close()
> - args.dest.close()
> + with open(args.src, 'r', encoding='utf-8') as src_fh:
> + src_data = json.load(src_fh)
> + with open(args.dest, 'r', encoding='utf-8') as dst_fh:
> + dest_data = json.load(dst_fh)
This could be
src_data = json.load(args.src.read_text('utf-8'))
dest_data = json.load(args.dest.read_text('utf-8'))
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|