##// END OF EJS Templates
Strip prefix in `attr_matches` result (#13943)...
Strip prefix in `attr_matches` result (#13943) Fixes #13935 Reasoning behind implementation chosen: - `a.b.c` prefix in `a.b.c.<tab>` needs to be preserved as otherwise the completer will replace it with completion rather than appending (so we cannot just use `.suffix`, we need to use `a.b.c.suffix` here) - as in the issue we cannot use `a b.suffix` but need to use `b.suffix` or `.suffix` - `d['a b']` prefix cannot be split using space splitting so we need to tokenize - however, we can do either `a[0].suffix` or `.suffix`

File last commit:

r27504:a96dd9e4
r28118:9663a9ad merge
Show More
syspathcontext.py
71 lines | 1.9 KiB | text/x-python | PythonLexer
# encoding: utf-8
"""
Context managers for adding things to sys.path temporarily.
Authors:
* Brian Granger
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2008-2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
import sys
import warnings
class appended_to_syspath(object):
"""
Deprecated since IPython 8.1, no replacements.
A context for appending a directory to sys.path for a second."""
def __init__(self, dir):
warnings.warn(
"`appended_to_syspath` is deprecated since IPython 8.1, and has no replacements",
DeprecationWarning,
stacklevel=2,
)
self.dir = dir
def __enter__(self):
if self.dir not in sys.path:
sys.path.append(self.dir)
self.added = True
else:
self.added = False
def __exit__(self, type, value, traceback):
if self.added:
try:
sys.path.remove(self.dir)
except ValueError:
pass
# Returning False causes any exceptions to be re-raised.
return False
class prepended_to_syspath(object):
"""A context for prepending a directory to sys.path for a second."""
def __init__(self, dir):
self.dir = dir
def __enter__(self):
if self.dir not in sys.path:
sys.path.insert(0,self.dir)
self.added = True
else:
self.added = False
def __exit__(self, type, value, traceback):
if self.added:
try:
sys.path.remove(self.dir)
except ValueError:
pass
# Returning False causes any exceptions to be re-raised.
return False