Esempio n. 1
0
 def wrapper(signal, *args, **kwargs): #{{{
     if not _isf(signal):
         raise TypeError('argument must be a python function')
     sig = getattr(signal, 'signal', None)
     if not isinstance(sig, DecoSignalExtension):
         raise TypeError("argument must have a signal attribute which must be a DecoSignalExtension instance")
     if not isinstance(sig, BaseSignal):
         raise TypeError("argument must have a signal attribute which must be a BaseSignal instance")
     return func(signal, *args, **kwargs)
Esempio n. 2
0
 def settings(func): #{{{
     signal = getattr(func, 'signal', None)
     if isinstance(signal, DecoSignalExtension) and isinstance(signal, BaseSignal):
         DecoSignalFunction = func
     elif not _isf(func) and not isclass(func):
         raise TypeError('argument must be a python function or a python class')
     else:
         signal = mkdeco(func, opt)
         args, vargs, vkeys, defaults = spec = cgetargspec(func)
         code_args = args + [v for v in (vargs, vkeys) if v != None]
         fcode = Code(CodeList(), (), code_args, bool(vargs), bool(vkeys), True, 'f', '<dynamic decorator signal function>', 1, None)
         fcode.code[:] = ([(SetLineno, 2), (LOAD_GLOBAL, 'signal')] + bp_call_args(*spec) + 
                         [(RETURN_VALUE, None)])
         DecoSignalFunction = newfunction(fcode.to_code(), locals(), 'DecoSignalFunction', default_argvals(args, defaults))
     d = DecoSignalFunction
     d = wraps(func)(d)
     d.signal = signal
     signal.signalfunc = d
     for n in signal.decorators:
         setattr(d, n, getattr(signal, n))
     opt['MAKE_SIGNAL'] = 1
     return global_settings(d, **opt)(d)
Esempio n. 3
0
 def settings(func): #{{{
     signal = getattr(func, 'signal', None)
     if isinstance(signal, DecoSignalExtension) and isinstance(signal, BaseSignal):
         locals().update(DecoSignalFunction=func)
     elif not _isf(func) and not isclass(func):
         raise TypeError('argument must be a python function or a python class')
     else:
         defstr, callstr = cargdefstr(func)
         signal = mkdeco(func, kwargs)
         fstr = """
         def DecoSignalFunction(%s):
             return signal(%s)
         """ %(defstr, callstr)
         exec compile(fstr.strip(), '<string>', 'exec') in locals()
     d = DecoSignalFunction
     d = wraps(func)(d)
     d.signal = signal
     for n in signal.decorators:
         setattr(d, n, getattr(signal, n))
     kwargs.pop('decoext', ())
     kwargs.pop('sigext', ())
     kwargs['MAKE_SIGNAL'] = 1
     return global_settings(d, **kwargs)(d)