From 2d46328e0952c99a8411e78eec24f5e47db8cfd7 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Sun, 23 Nov 2014 21:48:07 +0100 Subject: [PATCH] =?UTF-8?q?[gest=5Fcrans=5Flc]=20Check=20sur=20les=20param?= =?UTF-8?q?=C3=A8tres=20des=20TailCall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gestion/gest_crans_lc.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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