def _on_query(self, message):
        qid    = message.qid
        doc    = message.doc
        source = self.identity(message.receiver)
        target = self.identity(message.sender)
        if 'expiration' in message:
            expiration = message['expiration']
        else:
            expiration = None
        if not doc.can_read(target):
            return message.error(errors.PERMISSION_CANNOT_READ)

        sub = Subscription(
            source.location,
            target.location,
            doc.name,
            expiration
        )
        self.parent.subscribe(sub)
        self.owner.reply(
            doc,
            'deje-sub-add-response',
            {
                'qid': qid,
                'subscription': sub.serialize(),
            },
            target.key
        )
    def _on_response(self, message):
        qid  = message.qid
        subs = message['subs']

        # Deserialize
        for h in subs:
            sub_obj = Subscription()
            sub_obj.deserialize(subs[h])
            subs[h] = sub_obj

        self.toplevel._on_response(qid, [subs])
 def _on_response(self, message):
     qid = message.qid
     sub = Subscription()
     sub.deserialize(message['subscription'])
     self.parent.subscribe(sub)
     self.toplevel._on_response(qid, [sub])