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