63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # encoding: utf-8 | ||
|  | """
 | ||
|  | Context managers for adding things to sys.path temporarily. | ||
|  | 
 | ||
|  | Authors: | ||
|  | 
 | ||
|  | * Brian Granger | ||
|  | """
 | ||
|  | 
 | ||
|  | #----------------------------------------------------------------------------- | ||
|  | #  Copyright (C) 2008-2011  The yap_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 | ||
|  | 
 | ||
|  | 
 | ||
|  | 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 |