mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-18 02:40:07 +00:00
Audit script to find potentially broken for loops.
This commit is contained in:
parent
5e6201aede
commit
cc7a3bc2b5
43
misc/python3/audit-dict-for-loops.py
Normal file
43
misc/python3/audit-dict-for-loops.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
"""
|
||||||
|
The following code is valid in Python 2:
|
||||||
|
|
||||||
|
for x in my_dict.keys():
|
||||||
|
if something(x):
|
||||||
|
del my_dict[x]
|
||||||
|
|
||||||
|
But broken in Python 3.
|
||||||
|
|
||||||
|
One solution is:
|
||||||
|
|
||||||
|
for x in list(my_dict.keys()):
|
||||||
|
if something(x):
|
||||||
|
del my_dict[x]
|
||||||
|
|
||||||
|
Some but not all code in Tahoe has been changed to that. In other cases, the code was left unchanged since there was no `del`.
|
||||||
|
|
||||||
|
However, some mistakes may have slept through.
|
||||||
|
|
||||||
|
To help catch cases that were incorrectly ported, this script runs futurize on all ported modules, which should convert it into the `list()` form.
|
||||||
|
You can then look at git diffs to see if any of the impacted would be buggy without the newly added `list()`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
from subprocess import check_call
|
||||||
|
|
||||||
|
from allmydata.util import _python3
|
||||||
|
|
||||||
|
|
||||||
|
def fix_potential_issue():
|
||||||
|
for module in _python3.PORTED_MODULES + _python3.PORTED_TEST_MODULES:
|
||||||
|
filename = "src/" + module.replace(".", "/") + ".py"
|
||||||
|
if not os.path.exists(filename):
|
||||||
|
# Package, probably
|
||||||
|
filename = "src/" + module.replace(".", "/") + "/__init__.py"
|
||||||
|
check_call(["futurize", "-f", "lib2to3.fixes.fix_dict", "-w", filename])
|
||||||
|
print(
|
||||||
|
"All loops converted. Check diff to see if there are any that need to be commitedd."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
fix_potential_issue()
|
Loading…
Reference in New Issue
Block a user