argchecker.py (1356B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\machonethelpers\argchecker.py 2 import functools 3 4 class ValidateArgTypes(object): 5 6 def __init__(self, **argTypes): 7 self.argTypes = argTypes 8 9 def __call__(self, func): 10 11 @functools.wraps(func) 12 def wrapper(*args, **kwargs): 13 newArgs = list(args[:]) 14 newKwargs = kwargs.copy() 15 for argName, typeCast in self.argTypes.iteritems(): 16 if argName in newKwargs: 17 newKwargs[argName] = self._Cast(typeCast, newKwargs[argName]) 18 else: 19 try: 20 idx = func.__code__.co_varnames.index(argName) 21 except ValueError: 22 raise ValidateArgTypeException('CheckArgs failed because "%s" is not one of the arguments of "%s"' % (argName, func.__name__)) 23 24 newArgs[idx] = self._Cast(typeCast, newArgs[idx]) 25 26 return func(*newArgs, **newKwargs) 27 28 return wrapper 29 30 def _Cast(self, typeCast, value): 31 try: 32 return typeCast(value) 33 except ValueError: 34 raise ValidateArgTypeException('CheckArgs failed Was expecting %s but got "%s" of type %s' % (typeCast, value, type(value))) 35 36 37 class ValidateArgTypeException(RuntimeError): 38 pass