[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.args = args
|
||||||
self.kwargs = kwargs
|
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):
|
def __str__(self):
|
||||||
return "TailCall<%s(%s%s%s)>" % (
|
return "TailCall<%s(%s%s%s)>" % (
|
||||||
self.call.func_name,
|
self.call.func_name,
|
||||||
|
@ -167,6 +181,10 @@ class TailCall(object) :
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
|
tmpkwargs={}
|
||||||
|
tmpkwargs.update(self.kwargs)
|
||||||
|
tmpkwargs.update(kwargs)
|
||||||
|
self.check(self.args + args, tmpkwargs)
|
||||||
self.kwargs.update(kwargs)
|
self.kwargs.update(kwargs)
|
||||||
self.args = self.args + args
|
self.args = self.args + args
|
||||||
return self
|
return self
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue