From 35442eff810da5d41c0564702ebc13ae0d625e88 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 15 Dec 2019 16:15:45 +0100 Subject: [PATCH] Catch some cases were _sqlite3.Connection was misidentified as sqlite3.Connection --- jedi/inference/compiled/access.py | 15 +++++++++++++++ .../test_gradual/test_conversion.py | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 test/test_inference/test_gradual/test_conversion.py diff --git a/jedi/inference/compiled/access.py b/jedi/inference/compiled/access.py index 79fa4341..54f01691 100644 --- a/jedi/inference/compiled/access.py +++ b/jedi/inference/compiled/access.py @@ -386,6 +386,21 @@ class DirectObjectAccess(object): if inspect.ismodule(return_obj): return [access] + try: + module = return_obj.__module__ + except AttributeError: + pass + else: + try: + __import__(module) + # For some modules like _sqlite3, the __module__ for classes is + # different, in this case it's sqlite3. So we have to try to + # load that "original" module, because it's not loaded yet. If + # we don't do that, we don't really have a "parent" module and + # we would fall back to builtins. + except ImportError: + pass + module = inspect.getmodule(return_obj) if module is None: module = inspect.getmodule(type(return_obj)) diff --git a/test/test_inference/test_gradual/test_conversion.py b/test/test_inference/test_gradual/test_conversion.py new file mode 100644 index 00000000..e2f2b9ed --- /dev/null +++ b/test/test_inference/test_gradual/test_conversion.py @@ -0,0 +1,16 @@ +from os.path import join + +from jedi.inference.gradual.conversion import convert_names + + +def test_sqlite3_conversion(Script): + script1 = Script('import sqlite3; sqlite3.Connection') + d, = script1.goto_definitions() + + assert not d.module_path + assert d.full_name == 'sqlite3.Connection' + assert convert_names([d._name], only_stubs=True) + + d, = script1.goto_definitions(only_stubs=True) + assert d.is_stub() + assert d.full_name == 'sqlite3.dbapi2.Connection'