def _magic_sets(mcls, name, default, newargs): #{{{ classname, bases, clsdict = newargs past = set(default) cur = clsdict.pop(name, []) if not isbasemetaclass(bases, mcls): allowed = (CustomDecoSignal, DecoSignalExtension) for b in bases: if not issubclass(b, allowed): continue for bcls in mro(b): battr = getattr(bcls, name, None) if battr is None or not issubclass(bcls, allowed): continue past.update(battr) return frozenset(past) | frozenset(str(s) for s in cur)
def call_streamin(self, cw, func, ret, args, kwargs): #{{{ callfunc, cnam, sig, signame = self.caller, 'streamin', None, cw.__name__ if args: for cls in mro(args[0].__class__): sig = getsignal(getattr(cls, signame, None)) if sig and cw is sig.func: break else: sig = None if sig: args = (args[0], list(args[1:]), kwargs) else: args = (list(args), kwargs) for sfunc, t in cleanlist(cnam): callfunc(self, sfunc, cnam, False, ret, *args) return ret
def wrap(cw, *args, **kwargs): #{{{ sig, signame = None, cw.__name__ if args: for cls in mro(args[0].__class__): sig = getsignal(getattr(cls, signame, None)) if sig and cw is sig.func: break else: sig = None if sig: args = (args[0], list(args[1:]), kwargs) else: args = (list(args), kwargs) callfunc = self.caller for sfunc, t in cleanlist('streamin'): callfunc(self, sfunc, 'streamin', False, None, *args, **kwargs) args, kwargs = args return func(*args, **kwargs)