import optparse, copy

expDict = {
	'k': 1000,
	'K': 1024,
	'm': 1000*1000,
	'M': 1024*1024,
	'g': 1000*1000*1000,
	'G': 1024*1024*1024,
}

def checkAscSize(option, opt, value):
	try:
		mant, exp = value[:-1], value[-1]
		return int(mant)*expDict[exp]
	except (KeyError, ValueError, IndexError), msg:
		raise optparse.OptionValueError("Option %s: Invalid size value %s: %s"%(
			opt, value, msg))

class SizeOption(optparse.Option):
	TYPES = optparse.Option.TYPES+("size",)
	TYPE_CHECKER = copy.copy(optparse.Option.TYPE_CHECKER)
	TYPE_CHECKER["size"] = checkAscSize
