mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-09 23:34:45 +08:00
imports of c_builtins are now more pythonic, messing with the sys path is history
This commit is contained in:
57
builtin.py
57
builtin.py
@@ -89,58 +89,37 @@ class Parser(CachedModule):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def module(self):
|
def module(self):
|
||||||
def possible_python_path(path, offset=0):
|
def load_module(name, path):
|
||||||
dot_path = []
|
|
||||||
p = self.path
|
|
||||||
while p not in sys.path[offset:]:
|
|
||||||
p, sep, mod = p.rpartition(os.path.sep)
|
|
||||||
dot_path.append(mod.partition('.')[0])
|
|
||||||
return ".".join(reversed(dot_path))
|
|
||||||
|
|
||||||
def load_module(name, path=None):
|
|
||||||
""" Returns True if it is successful. """
|
|
||||||
if path:
|
if path:
|
||||||
self.sys_path.insert(0, path)
|
self.sys_path.insert(0, path)
|
||||||
|
|
||||||
temp, sys.path = sys.path, self.sys_path
|
temp, sys.path = sys.path, self.sys_path
|
||||||
# TODO reenable and check (stackoverflow question - pylab builtins)
|
content = {}
|
||||||
self.content = {}
|
exec_function('import %s as module' % name, content)
|
||||||
try:
|
self._module = content['module']
|
||||||
exec_function('import %s as module' % name, self.content)
|
|
||||||
except SystemError:
|
|
||||||
# this happens e.g. when loading PyQt4.QtCore. Somehow it needs
|
|
||||||
# the full path
|
|
||||||
if not self.path:
|
|
||||||
raise # this case is not covered
|
|
||||||
try:
|
|
||||||
# in the case of PyQt, the module is loaded anyway...
|
|
||||||
self._module = sys.modules[possible_python_path(path, 1)]
|
|
||||||
debug.warning('Loaded a module with SystemError.')
|
|
||||||
entries = True
|
|
||||||
except KeyError:
|
|
||||||
entries = False
|
|
||||||
else:
|
|
||||||
# entries may not be defined:
|
|
||||||
# http://stackoverflow.com/questions/10182743\
|
|
||||||
# /python-import-internals-difference
|
|
||||||
self._module = self.content['module']
|
|
||||||
entries = [e for e in dir(self._module)
|
|
||||||
if not e.startswith('__')]
|
|
||||||
|
|
||||||
self.sys_path, sys.path = sys.path, temp
|
self.sys_path, sys.path = sys.path, temp
|
||||||
|
|
||||||
if path:
|
if path:
|
||||||
self.sys_path.pop(0)
|
self.sys_path.pop(0)
|
||||||
|
|
||||||
return bool(entries)
|
|
||||||
|
|
||||||
if not self._module:
|
if not self._module:
|
||||||
path = self.path
|
path = self.path
|
||||||
|
name = self.name
|
||||||
if self.path:
|
if self.path:
|
||||||
|
|
||||||
|
dot_path = []
|
||||||
|
p = self.path
|
||||||
|
# search for the builtin with the correct path
|
||||||
|
while p and p not in sys.path:
|
||||||
|
p, sep, mod = p.rpartition(os.path.sep)
|
||||||
|
dot_path.append(mod.partition('.')[0])
|
||||||
|
if p:
|
||||||
|
name = ".".join(reversed(dot_path))
|
||||||
|
path = p
|
||||||
|
else:
|
||||||
path = os.path.dirname(self.path)
|
path = os.path.dirname(self.path)
|
||||||
|
|
||||||
if not load_module(self.name, path):
|
load_module(name, path)
|
||||||
if not load_module(possible_python_path(path)):
|
|
||||||
raise ImportError('Import problems with builtins?')
|
|
||||||
|
|
||||||
|
|
||||||
return self._module
|
return self._module
|
||||||
|
|||||||
1
test/completion/thirdparty/PyQt4.py
vendored
1
test/completion/thirdparty/PyQt4.py
vendored
@@ -17,4 +17,3 @@ QtGui.QStyleOptionComboBox().currentText
|
|||||||
|
|
||||||
#? []
|
#? []
|
||||||
QtGui.QStyleOptionComboBox().currentText.
|
QtGui.QStyleOptionComboBox().currentText.
|
||||||
|
|
||||||
|
|||||||
13
test/completion/thirdparty/pylab.py
vendored
13
test/completion/thirdparty/pylab.py
vendored
@@ -1,10 +1,23 @@
|
|||||||
import pylab
|
import pylab
|
||||||
pylab.
|
pylab.
|
||||||
|
|
||||||
|
# two gotos
|
||||||
|
#! ['numpy']
|
||||||
import numpy
|
import numpy
|
||||||
|
#! ['random']
|
||||||
|
import numpy.random
|
||||||
|
|
||||||
#? ['array2string']
|
#? ['array2string']
|
||||||
numpy.array2string
|
numpy.array2string
|
||||||
|
|
||||||
#? ['shape']
|
#? ['shape']
|
||||||
numpy.matrix().shape
|
numpy.matrix().shape
|
||||||
|
|
||||||
|
#? ['random_integers']
|
||||||
|
pylab.random_integers
|
||||||
|
|
||||||
|
#? []
|
||||||
|
numpy.random_integers
|
||||||
|
|
||||||
|
#? ['random_integers']
|
||||||
|
numpy.random.random_integers
|
||||||
|
|||||||
Reference in New Issue
Block a user