diff --git a/gestion/gest_crans_lc.py b/gestion/gest_crans_lc.py index 164b3ab2..eb674b26 100755 --- a/gestion/gest_crans_lc.py +++ b/gestion/gest_crans_lc.py @@ -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