class PTMHub(BaseManager): def __init__(self, *args, **kw): super(PTMHub, self).__init__(*args, **kw) self.__shadow_manager = ShadowManager(client = self) self.__subscription_manager = SubscriptionManager() self.__notification_manager = NotificationManager(registry = self.registry) def get_method_dispatcher(self): return HubMethodDispatcher(self) def __check_resolvable(self, owner): self.get_adapter(owner) def __mangle_notify_args(self, condition, owner, reference): if not owner: raise InternalIllegalArgumentError(owner) return (NotificationId(condition), Identifier(owner, need_abs = True), Identifier(reference, need_abs = True)) def do_subscribe(self, condition, owner, reference): self.__check_resolvable(owner) self.__subscription_manager.add_subscription(*self.__mangle_notify_args(condition, owner, reference)) def do_unsubscribe(self, condition, owner, reference): self.__subscription_manager.remove_subscription(*self.__mangle_notify_args(condition, owner, reference)) def do_notify(self, condition, owner, reference): (condition, owner, reference) = self.__mangle_notify_args(condition, owner, reference) self.__do_notify(condition, owner, reference) def __do_notify(self, condition, owner, reference): if DELETED in condition: condition = DELETED self.__notification_manager.notify(condition, owner, reference) def do_signal(self, condition, reference): (condition, _, reference) = self.__mangle_notify_args(condition, "/", reference) subscribers = self.__subscription_manager.get_subscribers(condition, reference) for s in subscribers: try: self.do_notify(condition, s, reference) except: logger.exception("notify failed") def do_register(self, identifier, payload): payload = self.__shadow_manager.get_shadow(payload) super(PTMHub, self).do_register(identifier, payload) def register_adapter(self, identifier, adapter): if not isinstance(adapter, AbstractResourceAdapter): raise TypeError("Need an instance of ResourceAdapter here. Got: " + str(adapter)) super(PTMHub, self).do_register(identifier, adapter)
def __init__(self, *args, **kw): super(PTMHub, self).__init__(*args, **kw) self.__shadow_manager = ShadowManager(client = self) self.__subscription_manager = SubscriptionManager() self.__notification_manager = NotificationManager(registry = self.registry)