Update pygettext.py to get ride of imp

Issue #26639: Replace imp with importlib in Tools/i18n/pygettext.py.

Remove _get_modpkg_path(), replaced with importlib.util.find_spec().
This commit is contained in:
Victor Stinner 2016-04-12 18:46:10 +02:00
parent a07614aa31
commit 328cb1fed0

View file

@ -156,7 +156,8 @@
""")
import os
import imp
import importlib.machinery
import importlib.util
import sys
import glob
import time
@ -263,8 +264,7 @@ def _visit_pyfiles(list, dirname, names):
# get extension for python source files
if '_py_ext' not in globals():
global _py_ext
_py_ext = [triple[0] for triple in imp.get_suffixes()
if triple[2] == imp.PY_SOURCE][0]
_py_ext = importlib.machinery.SOURCE_SUFFIXES[0]
# don't recurse into CVS directories
if 'CVS' in names:
@ -277,45 +277,6 @@ def _visit_pyfiles(list, dirname, names):
)
def _get_modpkg_path(dotted_name, pathlist=None):
"""Get the filesystem path for a module or a package.
Return the file system path to a file for a module, and to a directory for
a package. Return None if the name is not found, or is a builtin or
extension module.
"""
# split off top-most name
parts = dotted_name.split('.', 1)
if len(parts) > 1:
# we have a dotted path, import top-level package
try:
file, pathname, description = imp.find_module(parts[0], pathlist)
if file: file.close()
except ImportError:
return None
# check if it's indeed a package
if description[2] == imp.PKG_DIRECTORY:
# recursively handle the remaining name parts
pathname = _get_modpkg_path(parts[1], [pathname])
else:
pathname = None
else:
# plain name
try:
file, pathname, description = imp.find_module(
dotted_name, pathlist)
if file:
file.close()
if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]:
pathname = None
except ImportError:
pathname = None
return pathname
def getFilesForName(name):
"""Get a list of module files for a filename, a module or package name,
or a directory.
@ -330,7 +291,11 @@ def getFilesForName(name):
return list
# try to find module or package
name = _get_modpkg_path(name)
try:
spec = importlib.util.find_spec(name)
name = spec.origin
except ImportError:
name = None
if not name:
return []