123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- --- contrib/python/ipython/py2/IPython/core/completerlib.py (index)
- +++ contrib/python/ipython/py2/IPython/core/completerlib.py (working tree)
- @@ -19,6 +19,7 @@ from __future__ import print_function
- # Stdlib imports
- import glob
- import inspect
- +import itertools
- import os
- import re
- import sys
- @@ -44,6 +45,8 @@ from IPython.utils.py3compat import string_types
- # FIXME: this should be pulled in with the right call via the component system
- from IPython import get_ipython
-
- +from __res import importer
- +
- #-----------------------------------------------------------------------------
- # Globals and constants
- #-----------------------------------------------------------------------------
- @@ -68,6 +71,51 @@ magic_run_re = re.compile(r'.*(\.ipy|\.ipynb|\.py[w]?)$')
- # Local utilities
- #-----------------------------------------------------------------------------
-
- +arcadia_rootmodules_cache = None
- +arcadia_modules_cache = None
- +
- +
- +def arcadia_init_cache():
- + global arcadia_rootmodules_cache, arcadia_modules_cache
- + arcadia_rootmodules_cache = set()
- + arcadia_modules_cache = {}
- +
- + all_modules = itertools.chain(
- + sys.builtin_module_names,
- + importer.memory
- + )
- +
- + for name in all_modules:
- + path = name.split('.')
- + arcadia_rootmodules_cache.add(path[0])
- +
- + prefix = path[0]
- + for element in path[1:]:
- + if element == '__init__':
- + continue
- +
- + arcadia_modules_cache.setdefault(prefix, set()).add(element)
- + prefix += '.' + element
- +
- + arcadia_rootmodules_cache = sorted(arcadia_rootmodules_cache)
- + arcadia_modules_cache = {k: sorted(v) for k, v in arcadia_modules_cache.items()}
- +
- +
- +def arcadia_module_list(mod):
- + if arcadia_modules_cache is None:
- + arcadia_init_cache()
- +
- + return arcadia_modules_cache.get(mod, ())
- +
- +
- +def arcadia_get_root_modules():
- + if arcadia_rootmodules_cache is None:
- + arcadia_init_cache()
- +
- + return arcadia_rootmodules_cache
- +
- +
- +
- def module_list(path):
- """
- Return the list containing the names of the modules available in the given
- @@ -168,7 +216,8 @@ def try_import(mod, only_modules=False):
- for module in mods[1:]:
- m = getattr(m, module)
-
- - m_is_init = hasattr(m, '__file__') and '__init__' in m.__file__
- + filename = getattr(m, '__file__', '')
- + m_is_init = '__init__' in (filename or '') or filename == mod
-
- completions = []
- if (not hasattr(m, '__file__')) or (not only_modules) or m_is_init:
- @@ -177,10 +226,10 @@ def try_import(mod, only_modules=False):
-
- completions.extend(getattr(m, '__all__', []))
- if m_is_init:
- - completions.extend(module_list(os.path.dirname(m.__file__)))
- + completions.extend(arcadia_module_list(mod))
- completions = {c for c in completions if isinstance(c, string_types)}
- completions.discard('__init__')
- - return list(completions)
- + return sorted(completions)
-
-
- #-----------------------------------------------------------------------------
- @@ -229,10 +278,10 @@ def module_completion(line):
- # 'from xy<tab>' or 'import xy<tab>'
- if nwords < 3 and (words[0] in {'%aimport', 'import', 'from'}) :
- if nwords == 1:
- - return get_root_modules()
- + return arcadia_get_root_modules()
- mod = words[1].split('.')
- if len(mod) < 2:
- - return get_root_modules()
- + return arcadia_get_root_modules()
- completion_list = try_import('.'.join(mod[:-1]), True)
- return ['.'.join(mod[:-1] + [el]) for el in completion_list]
-
- --- contrib/python/ipython/py2/IPython/core/extensions.py (index)
- +++ contrib/python/ipython/py2/IPython/core/extensions.py (working tree)
- @@ -75,11 +75,11 @@ class ExtensionManager(Configurable):
- if module_str in self.loaded:
- return "already loaded"
-
- - from IPython.utils.syspathcontext import prepended_to_syspath
- -
- with self.shell.builtin_trap:
- if module_str not in sys.modules:
- - with prepended_to_syspath(self.ipython_extension_dir):
- + try:
- + sys.modules[module_str] = __import__('IPython.extensions.' + module_str)
- + except ImportError:
- __import__(module_str)
- mod = sys.modules[module_str]
- if self._call_load_ipython_extension(mod):
- --- contrib/python/ipython/py2/IPython/core/profiledir.py (index)
- +++ contrib/python/ipython/py2/IPython/core/profiledir.py (working tree)
- @@ -112,13 +112,11 @@ class ProfileDir(LoggingConfigurable):
- self._mkdir(self.startup_dir)
-
- readme = os.path.join(self.startup_dir, 'README')
- - src = os.path.join(get_ipython_package_dir(), u'core', u'profile', u'README_STARTUP')
-
- - if not os.path.exists(src):
- - self.log.warning("Could not copy README_STARTUP to startup dir. Source file %s does not exist.", src)
- -
- - if os.path.exists(src) and not os.path.exists(readme):
- - shutil.copy(src, readme)
- + if not os.path.exists(readme):
- + import pkgutil
- + with open(readme, 'wb') as f:
- + f.write(pkgutil.get_data(__name__, 'profile/README_STARTUP'))
-
- @observe('security_dir')
- def check_security_dir(self, change=None):
|