From e1425de8a437100601f312840d57cc0d4a10e264 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 31 Jan 2020 13:26:56 +0100 Subject: [PATCH] Make sure to be able to deal with all kinds of loaders, fixes #1487 --- jedi/_compatibility.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/jedi/_compatibility.py b/jedi/_compatibility.py index 709cd518..d8950018 100644 --- a/jedi/_compatibility.py +++ b/jedi/_compatibility.py @@ -113,7 +113,12 @@ def find_module_py33(string, path=None, loader=None, full_name=None, is_global_s def _from_loader(loader, string): - is_package = loader.is_package(string) + try: + is_package_method = loader.is_package + except AttributeError: + is_package = False + else: + is_package = is_package_method(string) try: get_filename = loader.get_filename except AttributeError: @@ -123,7 +128,11 @@ def _from_loader(loader, string): # To avoid unicode and read bytes, "overwrite" loader.get_source if # possible. - f = type(loader).get_source + try: + f = type(loader).get_source + except AttributeError: + raise ImportError("get_source was not defined on loader") + if is_py3 and f is not importlib.machinery.SourceFileLoader.get_source: # Unfortunately we are reading unicode here, not bytes. # It seems hard to get bytes, because the zip importer