[gest_crans_lc] Check sur les paramètres des TailCall
This commit is contained in:
parent
df038bbaaf
commit
2d46328e09
1 changed files with 18 additions and 0 deletions
|
@ -147,6 +147,20 @@ class TailCall(object) :
|
|||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
|
||||
self.check(self.args, self.kwargs)
|
||||
|
||||
def check(self, args, kwargs):
|
||||
call = self.call
|
||||
if isinstance(call, TailCaller):
|
||||
call = call.f
|
||||
targs = inspect.getargspec(call)
|
||||
if targs.varargs is not None:
|
||||
if len(args) + len(kwargs) > len(targs.args):
|
||||
raise TypeError("%s() takes at most %s arguments (%s given)" % (call.func_name, len(targs.args), len(args) + len(kwargs)))
|
||||
for key in kwargs:
|
||||
if key not in targs.args:
|
||||
raise TypeError("%s() got an unexpected keyword argument '%s'" % (call.func_name, key))
|
||||
|
||||
def __str__(self):
|
||||
return "TailCall<%s(%s%s%s)>" % (
|
||||
self.call.func_name,
|
||||
|
@ -167,6 +181,10 @@ class TailCall(object) :
|
|||
return result
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
tmpkwargs={}
|
||||
tmpkwargs.update(self.kwargs)
|
||||
tmpkwargs.update(kwargs)
|
||||
self.check(self.args + args, tmpkwargs)
|
||||
self.kwargs.update(kwargs)
|
||||
self.args = self.args + args
|
||||
return self
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue