We can circumvent the '__main__' redefinition problem by passing --scripts-are-modules. Take mypy out of the loop per-filename and check everything in one go: it's quite a bit faster.
Signed-off-by: John Snow <js...@redhat.com> --- tests/qemu-iotests/linters.py | 62 ++++++++++++++++------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/tests/qemu-iotests/linters.py b/tests/qemu-iotests/linters.py index 9c97324e87..ac9f77c5ac 100755 --- a/tests/qemu-iotests/linters.py +++ b/tests/qemu-iotests/linters.py @@ -82,40 +82,36 @@ def run_linters( print('=== mypy ===') sys.stdout.flush() - # We have to call mypy separately for each file. Otherwise, it - # will interpret all given files as belonging together (i.e., they - # may not both define the same classes, etc.; most notably, they - # must not both define the __main__ module). - for filename in files: - p = subprocess.run( - ( - 'python3', '-m', 'mypy', - '--warn-unused-configs', - '--disallow-subclassing-any', - '--disallow-any-generics', - '--disallow-incomplete-defs', - '--disallow-untyped-decorators', - '--no-implicit-optional', - '--warn-redundant-casts', - '--warn-unused-ignores', - '--no-implicit-reexport', - '--namespace-packages', - # Until we can use mypy >= 0.920, see - # https://github.com/python/mypy/issues/9852 - '--no-incremental', - filename, - ), - cwd=directory, - env=env, - check=False, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - universal_newlines=True - ) + p = subprocess.run( + ( + 'python3', '-m', 'mypy', + '--warn-unused-configs', + '--disallow-subclassing-any', + '--disallow-any-generics', + '--disallow-incomplete-defs', + '--disallow-untyped-decorators', + '--no-implicit-optional', + '--warn-redundant-casts', + '--warn-unused-ignores', + '--no-implicit-reexport', + '--namespace-packages', + # Until we can use mypy >= 0.920, see + # https://github.com/python/mypy/issues/9852 + '--no-incremental', + '--scripts-are-modules', + *files, + ), + cwd=directory, + env=env, + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True + ) - ret += p.returncode - if p.returncode != 0: - print(p.stdout) + ret += p.returncode + if p.returncode != 0: + print(p.stdout) return ret -- 2.31.1