syspathcontext.py
71 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2252 | # encoding: utf-8 | ||
""" | ||||
Context managers for adding things to sys.path temporarily. | ||||
Authors: | ||||
* Brian Granger | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r2252 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import sys | ||||
MinRK
|
r14693 | from IPython.utils.py3compat import cast_bytes_py2 | ||
Brian Granger
|
r2498 | #----------------------------------------------------------------------------- | ||
# Code | ||||
#----------------------------------------------------------------------------- | ||||
Brian Granger
|
r2252 | class appended_to_syspath(object): | ||
"""A context for appending a directory to sys.path for a second.""" | ||||
def __init__(self, dir): | ||||
MinRK
|
r14693 | self.dir = cast_bytes_py2(dir, sys.getdefaultencoding()) | ||
Brian Granger
|
r2252 | |||
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): | ||||
MinRK
|
r14693 | self.dir = cast_bytes_py2(dir, sys.getdefaultencoding()) | ||
Brian Granger
|
r2252 | |||
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 | ||||