syspathcontext.py
62 lines
| 1.7 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. | ||||
#----------------------------------------------------------------------------- | ||||
import sys | ||||
Brian Granger
|
r2498 | |||
Brian Granger
|
r2252 | class appended_to_syspath(object): | ||
"""A context for appending a directory to sys.path for a second.""" | ||||
def __init__(self, dir): | ||||
Srinivas Reddy Thatiparthy
|
r23666 | self.dir = dir | ||
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): | ||||
Srinivas Reddy Thatiparthy
|
r23666 | self.dir = dir | ||
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 | ||||