[gest_crans_lc] Check sur les paramètres des TailCall

This commit is contained in:
Valentin Samir 2014-11-23 21:48:07 +01:00
parent df038bbaaf
commit 2d46328e09

View file

@ -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