From 69802f6163c9f18ca0e0b9c4c43a49365fc63e2d Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Wed, 24 Jul 2019 17:00:39 -0700 Subject: closes bpo-37675: Use pkgutil.iter_modules to find fixers in a package rather than listdir. (14942) (cherry picked from commit 93e8aa62cfd0a61efed4a61a2ffc2283ae986ef2) Co-authored-by: Benjamin Peterson --- Lib/lib2to3/refactor.py | 8 ++++---- .../next/Tools-Demos/2019-07-24-16-20-54.bpo-37675.951Cvf.rst | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Tools-Demos/2019-07-24-16-20-54.bpo-37675.951Cvf.rst diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index 7841b99..55fd60f 100644 --- a/Lib/lib2to3/refactor.py +++ b/Lib/lib2to3/refactor.py @@ -14,6 +14,7 @@ __author__ = "Guido van Rossum " # Python imports import io import os +import pkgutil import sys import logging import operator @@ -30,13 +31,12 @@ from . import btm_matcher as bm def get_all_fix_names(fixer_pkg, remove_prefix=True): """Return a sorted list of all available fix names in the given package.""" pkg = __import__(fixer_pkg, [], [], ["*"]) - fixer_dir = os.path.dirname(pkg.__file__) fix_names = [] - for name in sorted(os.listdir(fixer_dir)): - if name.startswith("fix_") and name.endswith(".py"): + for finder, name, ispkg in pkgutil.iter_modules(pkg.__path__): + if name.startswith("fix_"): if remove_prefix: name = name[4:] - fix_names.append(name[:-3]) + fix_names.append(name) return fix_names diff --git a/Misc/NEWS.d/next/Tools-Demos/2019-07-24-16-20-54.bpo-37675.951Cvf.rst b/Misc/NEWS.d/next/Tools-Demos/2019-07-24-16-20-54.bpo-37675.951Cvf.rst new file mode 100644 index 0000000..e28fa20 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2019-07-24-16-20-54.bpo-37675.951Cvf.rst @@ -0,0 +1 @@ +2to3 now works when run from a zipped standard library. -- cgit v0.12