diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/python/ipython/py3/patches/01-arcadia.patch | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/python/ipython/py3/patches/01-arcadia.patch')
-rw-r--r-- | contrib/python/ipython/py3/patches/01-arcadia.patch | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/contrib/python/ipython/py3/patches/01-arcadia.patch b/contrib/python/ipython/py3/patches/01-arcadia.patch new file mode 100644 index 0000000000..335f93f18e --- /dev/null +++ b/contrib/python/ipython/py3/patches/01-arcadia.patch @@ -0,0 +1,171 @@ +--- contrib/python/ipython/py3/IPython/core/completer.py (index) ++++ contrib/python/ipython/py3/IPython/core/completer.py (working tree) +@@ -996,6 +996,7 @@ def _make_signature(completion)-> str: + + """ + ++ return '(%s)'% ', '.join([f for f in (_formatparamchildren(p) for p in completion.params) if f]) + # it looks like this might work on jedi 0.17 + if hasattr(completion, 'get_signatures'): + signatures = completion.get_signatures() +@@ -1388,7 +1389,7 @@ class IPCompleter(Completer): + else: + raise ValueError("Don't understand self.omit__names == {}".format(self.omit__names)) + +- interpreter = jedi.Interpreter(text[:offset], namespaces) ++ interpreter = jedi.Interpreter(text[:offset], namespaces, column=cursor_column, line=cursor_line + 1) + try_jedi = True + + try: +@@ -1415,7 +1416,7 @@ class IPCompleter(Completer): + if not try_jedi: + return [] + try: +- return filter(completion_filter, interpreter.complete(column=cursor_column, line=cursor_line + 1)) ++ return filter(completion_filter, interpreter.completions()) + except Exception as e: + if self.debug: + return [_FakeJediCompletion('Oops Jedi has crashed, please report a bug with the following:\n"""\n%s\ns"""' % (e))] +--- contrib/python/ipython/py3/IPython/core/completerlib.py (index) ++++ contrib/python/ipython/py3/IPython/core/completerlib.py (working tree) +@@ -18,6 +18,7 @@ These are all loaded by default by IPython. + # Stdlib imports + import glob + import inspect ++import itertools + import os + import re + import sys +@@ -39,6 +40,8 @@ from IPython import get_ipython + + from typing import List + ++from __res import importer ++ + #----------------------------------------------------------------------------- + # Globals and constants + #----------------------------------------------------------------------------- +@@ -64,6 +67,50 @@ 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 +@@ -165,7 +212,8 @@ def try_import(mod: str, only_modules=False) -> List[str]: + except: + return [] + +- m_is_init = '__init__' in (getattr(m, '__file__', '') or '') ++ 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: +@@ -174,10 +222,10 @@ def try_import(mod: str, only_modules=False) -> List[str]: + + 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_set = {c for c in completions if isinstance(c, str)} + completions_set.discard('__init__') +- return list(completions_set) ++ return sorted(completions_set) + + + #----------------------------------------------------------------------------- +@@ -226,10 +274,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/py3/IPython/core/extensions.py (index) ++++ contrib/python/ipython/py3/IPython/core/extensions.py (working tree) +@@ -72,11 +72,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: + mod = import_module(module_str) + if mod.__file__.startswith(self.ipython_extension_dir): + print(("Loading extensions from {dir} is deprecated. " +--- contrib/python/ipython/py3/IPython/core/profiledir.py (index) ++++ contrib/python/ipython/py3/IPython/core/profiledir.py (working tree) +@@ -111,13 +111,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): |