def __init__(self, path=None, name=None, sys_path=None): if sys_path is None: sys_path = modules.get_sys_path() if not name: name = os.path.basename(path) name = name.rpartition('.')[0] # cut file type (normally .so) super(BuiltinModule, self).__init__(path=path, name=name) self.sys_path = list(sys_path) self._module = None
def _follow_file_system(self): if self.file_path: sys_path_mod = list(self._sys_path_with_modifications()) module = self.import_stmt.get_parent_until() if not module.has_explicit_absolute_import: # If the module explicitly asks for absolute imports, # there's probably a bogus local one. sys_path_mod.insert(0, self.file_path) # First the sys path is searched normally and if that doesn't # succeed, try to search the parent directories, because sometimes # Jedi doesn't recognize sys.path modifications (like py.test # stuff). old_path, temp_path = self.file_path, os.path.dirname(self.file_path) while old_path != temp_path: sys_path_mod.append(temp_path) old_path, temp_path = temp_path, os.path.dirname(temp_path) else: sys_path_mod = list(modules.get_sys_path()) return self._follow_sys_path(sys_path_mod)
def _follow_file_system(self): if self.file_path: sys_path_mod = list(self._sys_path_with_modifications()) module = self.import_stmt.get_parent_until() if not module.has_explicit_absolute_import: # If the module explicitly asks for absolute imports, # there's probably a bogus local one. sys_path_mod.insert(0, self.file_path) # First the sys path is searched normally and if that doesn't # succeed, try to search the parent directories, because sometimes # Jedi doesn't recognize sys.path modifications (like py.test # stuff). old_path, temp_path = self.file_path, os.path.dirname( self.file_path) while old_path != temp_path: sys_path_mod.append(temp_path) old_path, temp_path = temp_path, os.path.dirname(temp_path) else: sys_path_mod = list(modules.get_sys_path()) return self._follow_sys_path(sys_path_mod)
def _follow_file_system(self): """ Find a module with a path (of the module, like usb.backend.libusb10). """ def follow_str(ns_path, string): debug.dbg('follow_module', ns_path, string) path = None if ns_path: path = ns_path elif self.import_stmt.relative_count: path = self.get_relative_path() global imports_processed imports_processed += 1 importing = None if path is not None: importing = find_module(string, [path]) else: debug.dbg('search_module', string, self.file_path) # Override the sys.path. It works only good that way. # Injecting the path directly into `find_module` did not work. sys.path, temp = sys_path_mod, sys.path try: importing = find_module(string) except ImportError: sys.path = temp raise sys.path = temp return importing if self.file_path: sys_path_mod = list(self.sys_path_with_modifications()) sys_path_mod.insert(0, self.file_path) else: sys_path_mod = list(modules.get_sys_path()) def module_not_found(): raise ModuleNotFound('The module you searched has not been found') current_namespace = (None, None, None) # now execute those paths rest = [] for i, s in enumerate(self.import_path): try: current_namespace = follow_str(current_namespace[1], s) except ImportError: if self.import_stmt.relative_count \ and len(self.import_path) == 1: # follow `from . import some_variable` rel_path = self.get_relative_path() with common.ignored(ImportError): current_namespace = follow_str(rel_path, '__init__') if current_namespace[1]: rest = self.import_path[i:] else: module_not_found() if current_namespace == (None, None, False): module_not_found() sys_path_mod.pop(0) # TODO why is this here? path = current_namespace[1] is_package_directory = current_namespace[2] f = None if is_package_directory or current_namespace[0]: # is a directory module if is_package_directory: path += '/__init__.py' with open(path) as f: source = f.read() else: source = current_namespace[0].read() current_namespace[0].close() if path.endswith('.py'): f = modules.Module(path, source) else: f = builtin.BuiltinModule(path=path) else: f = builtin.BuiltinModule(name=path) return f.parser.module, rest
def _follow_file_system(self): """ Find a module with a path (of the module, like usb.backend.libusb10). """ def follow_str(ns_path, string): debug.dbg('follow_module', ns_path, string) path = None if ns_path: path = ns_path elif self._is_relative_import(): path = self._get_relative_path() global imports_processed imports_processed += 1 if path is not None: importing = find_module(string, [path]) else: debug.dbg('search_module', string, self.file_path) # Override the sys.path. It works only good that way. # Injecting the path directly into `find_module` did not work. sys.path, temp = sys_path_mod, sys.path try: importing = find_module(string) finally: sys.path = temp return importing if self.file_path: sys_path_mod = list(self._sys_path_with_modifications()) module = self.import_stmt.get_parent_until() if not module.has_explicit_absolute_import: # If the module explicitly asks for absolute imports, # there's probably a bogus local one. sys_path_mod.insert(0, self.file_path) else: sys_path_mod = list(modules.get_sys_path()) def module_not_found(): raise ModuleNotFound('The module you searched has not been found') current_namespace = (None, None, None) # now execute those paths rest = [] for i, s in enumerate(self.import_path): try: current_namespace = follow_str(current_namespace[1], s) except ImportError: _continue = False if self._is_relative_import() and len(self.import_path) == 1: # follow `from . import some_variable` rel_path = self._get_relative_path() with common.ignored(ImportError): current_namespace = follow_str(rel_path, '__init__') elif current_namespace[2]: # is a package for n in self._namespace_packages(current_namespace[1], self.import_path[:i]): try: current_namespace = follow_str(n, s) if current_namespace[1]: _continue = True break except ImportError: pass if not _continue: if current_namespace[1]: rest = self.import_path[i:] break else: module_not_found() if current_namespace == (None, None, False): module_not_found() sys_path_mod.pop(0) # TODO why is this here? path = current_namespace[1] is_package_directory = current_namespace[2] f = None if is_package_directory or current_namespace[0]: # is a directory module if is_package_directory: path += '/__init__.py' with open(path) as f: source = f.read() else: source = current_namespace[0].read() current_namespace[0].close() if path.endswith('.py'): f = modules.Module(path, source) else: f = builtin.BuiltinModule(path=path) else: f = builtin.BuiltinModule(name=path) return f.parser.module, rest