# 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. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- import sys from IPython.utils.py3compat import cast_bytes_py2 #----------------------------------------------------------------------------- # Code #----------------------------------------------------------------------------- class appended_to_syspath(object): """A context for appending a directory to sys.path for a second.""" def __init__(self, dir): self.dir = cast_bytes_py2(dir, sys.getdefaultencoding()) 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 = cast_bytes_py2(dir, sys.getdefaultencoding()) 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