syspathcontext.py
67 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2252 | #!/usr/bin/env python | ||
# encoding: utf-8 | ||||
""" | ||||
Context managers for adding things to sys.path temporarily. | ||||
Authors: | ||||
* Brian Granger | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2008-2009 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. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import sys | ||||
class appended_to_syspath(object): | ||||
"""A context for appending 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.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 | ||||