mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	Module to help other modules locate their resources. It currently knows about
resources in applets and separate OS9 style resource files, but it will eventually also be thought the hoops to jump through on OSX/MachO.
This commit is contained in:
		
							parent
							
								
									8f2b13efce
								
							
						
					
					
						commit
						de3226f7f9
					
				
					 1 changed files with 68 additions and 0 deletions
				
			
		
							
								
								
									
										68
									
								
								Mac/Lib/macresource.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								Mac/Lib/macresource.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,68 @@ | |||
| """macresource - Locate and open the resources needed for a script.""" | ||||
| 
 | ||||
| from Carbon import Res | ||||
| import os | ||||
| import sys | ||||
| 
 | ||||
| class ArgumentError(TypeError): pass | ||||
| class ResourceFileNotFoundError(ImportError): pass | ||||
| 
 | ||||
| def need(restype, resid, filename=None, modname=None): | ||||
| 	"""Open a resource file, if needed. restype and resid | ||||
| 	are required parameters, and identify the resource for which to test. If it | ||||
| 	is available we are done. If it is not available we look for a file filename | ||||
| 	(default: modname with .rsrc appended) either in the same folder as | ||||
| 	where modname was loaded from, or otherwise across sys.path.""" | ||||
| 
 | ||||
| 	if modname is None and filename is None: | ||||
| 		raise ArgumentError, "Either filename or modname argument (or both) must be given" | ||||
| 	 | ||||
| 	if type(resid) is type(1): | ||||
| 		try: | ||||
| 			h = Res.GetResource(restype, resid) | ||||
| 		except Res.Error: | ||||
| 			pass | ||||
| 		else: | ||||
| 			return | ||||
| 	else: | ||||
| 		try: | ||||
| 			h = Res.GetNamedResource(restype, resid) | ||||
| 		except Res.Error: | ||||
| 			pass | ||||
| 		else: | ||||
| 			return | ||||
| 			 | ||||
| 	# Construct a filename if we don't have one | ||||
| 	if not filename: | ||||
| 		if '.' in modname: | ||||
| 			filename = modname.split('.')[-1] + '.rsrc' | ||||
| 		else: | ||||
| 			filename = modname + '.rsrc' | ||||
| 	 | ||||
| 	# Now create a list of folders to search | ||||
| 	searchdirs = [] | ||||
| 	if modname == '__main__': | ||||
| 		# If we're main we look in the current directory | ||||
| 		searchdirs = [os.curdir] | ||||
| 	if sys.modules.has_key(modname): | ||||
| 		mod = sys.modules[modname] | ||||
| 		if hasattr(mod, '__file__'): | ||||
| 			searchdirs = [mod.__file__] | ||||
| 	if not searchdirs: | ||||
| 		searchdirs = sys.path | ||||
| 	 | ||||
| 	# And look for the file | ||||
| 	for dir in searchdirs: | ||||
| 		pathname = os.path.join(dir, filename) | ||||
| 		if os.path.exists(pathname): | ||||
| 			break | ||||
| 	else: | ||||
| 		raise ResourceFileNotFoundError, filename | ||||
| 	 | ||||
| 	Res.FSpOpenResFile(pathname, 1) | ||||
| 	 | ||||
| 	# And check that the resource exists now | ||||
| 	if type(resid) is type(1): | ||||
| 		h = Res.GetResource(restype, resid) | ||||
| 	else: | ||||
| 		h = Res.GetNamedResource(restype, resid) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen