From 777c0a67f70b9aeff55cfc70add2d56dfd577f10 Mon Sep 17 00:00:00 2001 From: Sebastian Ramacher Date: Wed, 29 Jan 2020 12:51:51 +0100 Subject: [PATCH 1/2] Immediately close file object --- bpython/importcompletion.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bpython/importcompletion.py b/bpython/importcompletion.py index 6dea46125..35c2add66 100644 --- a/bpython/importcompletion.py +++ b/bpython/importcompletion.py @@ -43,6 +43,8 @@ SUFFIXES = importlib.machinery.all_suffixes() else: + import imp + SUFFIXES = [suffix for suffix, mode, type in imp.get_suffixes()] # The cached list of all known modules @@ -158,9 +160,15 @@ def find_modules(path): # Workaround for issue #166 continue try: + is_package = False with warnings.catch_warnings(): warnings.simplefilter("ignore", ImportWarning) fo, pathname, _ = imp.find_module(name, [path]) + if fo is not None: + fo.close() + else: + # Yay, package + is_package = True except (ImportError, IOError, SyntaxError): continue except UnicodeEncodeError: @@ -168,10 +176,7 @@ def find_modules(path): # invalid encoding continue else: - if fo is not None: - fo.close() - else: - # Yay, package + if is_package: for subname in find_modules(pathname): if subname != "__init__": yield "%s.%s" % (name, subname) From 596d5f1725e3e30d526723c938c152b1da6f6306 Mon Sep 17 00:00:00 2001 From: Sebastian Ramacher Date: Wed, 29 Jan 2020 13:52:33 +0100 Subject: [PATCH 2/2] Use importlib for Python 3 (fixes #791) --- bpython/importcompletion.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/bpython/importcompletion.py b/bpython/importcompletion.py index 35c2add66..0fbc46d58 100644 --- a/bpython/importcompletion.py +++ b/bpython/importcompletion.py @@ -32,7 +32,6 @@ current_from_import_import, ) -import imp import os import sys import warnings @@ -143,6 +142,10 @@ def find_modules(path): filenames = os.listdir(path) except EnvironmentError: filenames = [] + + if py3: + finder = importlib.machinery.FileFinder(path) + for name in filenames: if not any(name.endswith(suffix) for suffix in SUFFIXES): # Possibly a package @@ -163,12 +166,22 @@ def find_modules(path): is_package = False with warnings.catch_warnings(): warnings.simplefilter("ignore", ImportWarning) - fo, pathname, _ = imp.find_module(name, [path]) - if fo is not None: - fo.close() + if py3: + spec = finder.find_spec(name) + if spec is None: + continue + if spec.submodule_search_locations is not None: + pathname = spec.submodule_search_locations[0] + is_package = True + else: + pathname = spec.origin else: - # Yay, package - is_package = True + fo, pathname, _ = imp.find_module(name, [path]) + if fo is not None: + fo.close() + else: + # Yay, package + is_package = True except (ImportError, IOError, SyntaxError): continue except UnicodeEncodeError: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy