[Python-checkins] cpython: Update pygettext.py to get ride of imp

victor.stinner python-checkins at python.org
Tue Apr 12 12:46:17 EDT 2016


https://hg.python.org/cpython/rev/cd03ff74eaea
changeset:   100944:cd03ff74eaea
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Tue Apr 12 18:46:10 2016 +0200
summary:
  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().

files:
  Tools/i18n/pygettext.py |  51 ++++------------------------
  1 files changed, 8 insertions(+), 43 deletions(-)


diff --git a/Tools/i18n/pygettext.py b/Tools/i18n/pygettext.py
--- a/Tools/i18n/pygettext.py
+++ b/Tools/i18n/pygettext.py
@@ -156,7 +156,8 @@
 """)
 
 import os
-import imp
+import importlib.machinery
+import importlib.util
 import sys
 import glob
 import time
@@ -263,8 +264,7 @@
     # 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 _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 @@
             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 []
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list