NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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