| """Filename globbing utility.""" | 
 |  | 
 | import os | 
 | import fnmatch | 
 | import re | 
 |  | 
 |  | 
 | def glob(pathname): | 
 | 	"""Return a list of paths matching a pathname pattern. | 
 |  | 
 | 	The pattern may contain simple shell-style wildcards a la fnmatch. | 
 |  | 
 | 	""" | 
 | 	if not has_magic(pathname): | 
 | 		if os.path.exists(pathname): | 
 | 			return [pathname] | 
 | 		else: | 
 | 			return [] | 
 | 	dirname, basename = os.path.split(pathname) | 
 | 	if has_magic(dirname): | 
 | 		list = glob(dirname) | 
 | 	else: | 
 | 		list = [dirname] | 
 | 	if not has_magic(basename): | 
 | 		result = [] | 
 | 		for dirname in list: | 
 | 			if basename or os.path.isdir(dirname): | 
 | 				name = os.path.join(dirname, basename) | 
 | 				if os.path.exists(name): | 
 | 					result.append(name) | 
 | 	else: | 
 | 		result = [] | 
 | 		for dirname in list: | 
 | 			sublist = glob1(dirname, basename) | 
 | 			for name in sublist: | 
 | 				result.append(os.path.join(dirname, name)) | 
 | 	return result | 
 |  | 
 | def glob1(dirname, pattern): | 
 | 	if not dirname: dirname = os.curdir | 
 | 	try: | 
 | 		names = os.listdir(dirname) | 
 | 	except os.error: | 
 | 		return [] | 
 | 	result = [] | 
 | 	for name in names: | 
 | 		if name[0] != '.' or pattern[0] == '.': | 
 | 			if fnmatch.fnmatch(name, pattern): | 
 | 				result.append(name) | 
 | 	return result | 
 |  | 
 |  | 
 | magic_check = re.compile('[*?[]') | 
 |  | 
 | def has_magic(s): | 
 | 	return magic_check.search(s) is not None |