On 2/15/21 11:09 AM, Kevin Wolf wrote: >>> This breaks 297:
>>> === mypy === >>> +300:646: error: Dict entry 2 has incompatible type "str": "Dict[str, >>> bool]"; expected "str": "str" >>> +Found 1 error in 1 file (checked 1 source file) >> >> is beyond my skill. The typing at line 33: >> >> BlockBitmapMapping = List[Dict[str, Union[str, List[Dict[str, str]]]]] >> >> is insufficient to allow our new 'transform' member in the new >> transform_mapping() -> Block BitmapMapping near line 677: >> >> 'bitmaps': [ >> { >> 'name': 'bmap-a', >> 'alias': 'bmap-a', >> 'transform': >> { >> 'persistent': True >> } >> }, >> >> but I'm not sure how to tell python the right type it should be. John? > > To be honest, this looks sufficiently like JSON that I would just go for > List[Dict[str, Any]] (as long as recursive types don't work), but if you > really want to have an explicit type, I think you'd have to replace the > rightmost str with Union[str, Dict[str, bool]] to allow both. Indeed, I played with it before reading your response, and came up with this. Shall I turn it into a formal patch? diff --git i/tests/qemu-iotests/300 w/tests/qemu-iotests/300 index 63036f6a6e13..7501bd1018e2 100755 --- i/tests/qemu-iotests/300 +++ w/tests/qemu-iotests/300 @@ -30,7 +30,10 @@ import iotests # pylint: disable=wrong-import-order import qemu -BlockBitmapMapping = List[Dict[str, Union[str, List[Dict[str, str]]]]] +BlockBitmapMapping = List[Dict[str, + Union[str, + List[Dict[str, + Union[str, Dict[str, bool]]]]]]] mig_sock = os.path.join(iotests.sock_dir, 'mig_sock') @@ -602,7 +605,8 @@ class TestCrossAliasMigration(TestDirtyBitmapMigration): class TestAliasTransformMigration(TestDirtyBitmapMigration): """ - Tests the 'transform' option which modifies bitmap persistence on migration. + Tests the 'transform' option which modifies bitmap persistence on + migration. """ src_node_name = 'node-a' @@ -674,7 +678,8 @@ class TestAliasTransformMigration(TestDirtyBitmapMigration): bitmaps = self.vm_b.query_bitmaps() for node in bitmaps: - bitmaps[node] = sorted(((bmap['name'], bmap['persistent']) for bmap in bitmaps[node])) + bitmaps[node] = sorted(((bmap['name'], bmap['persistent']) + for bmap in bitmaps[node])) self.assertEqual(bitmaps, {'node-a': [('bmap-a', True), ('bmap-b', False)], -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org