Exemplo n.º 1
0
    def __get__(self, instance, cls=None):
        if instance is None:
            owner = cls
        else:
            owner = instance
        key = id(owner)
        try:
            return self._instance_signals[key]
        except KeyError:
            pass

        parent = None
        signature = self.signature
        if instance is None:
            extra_arg = inspect.Parameter(
                name='sender',
                kind=inspect.Parameter.KEYWORD_ONLY,
                default=None)

            def _params_gen():
                existing = iter(signature.parameters.values())
                for param in existing:
                    if param.kind in (inspect.Parameter.KEYWORD_ONLY,
                                      inspect.Parameter.VAR_KEYWORD):
                        yield extra_arg
                        yield param
                        break
                    else:
                        yield param
                else:
                    yield extra_arg
                yield from existing
            signature = signature.replace(parameters=list(_params_gen()))
        else:
            if cls:
                parent = self.__get__(None, cls)

        finalize(owner, self._instance_signals.pop, key, None)

        new_signal = type(self)(self.name, doc=self.__doc__,
                                signature=signature, _owner=owner)
        if parent:
            new_signal.connect(parent,
                               arg_adapter=_sender_arg_adapter(instance))
        self._instance_signals[key] = new_signal
        return new_signal
Exemplo n.º 2
0
 def __set__(self, instance, value):
     exp = coerce(value, size=self._size)
     if id(instance) not in self._instance_expressions:
         finalize(instance, self._instance_expressions.pop,
                  id(instance), None)
     self._instance_expressions[id(instance)] = simplify(exp)