def delete_notification_from_user_info(self, notification_id): ''' Helper method to delete the notification from the user_info dictionary @param notification_id str ''' user_ids, assocs = self.clients.resource_registry.find_subjects(object=notification_id, predicate=PRED.hasNotification, id_only=True) for assoc in assocs: self.clients.resource_registry.delete_association(assoc) for user_id in user_ids: user = self.clients.resource_registry.read(user_id) value = self.event_processor.user_info[user.name] for notif in value['notifications']: if notification_id == notif._id: # remove the notification value['notifications'].remove(notif) # remove the notification_subscription self.event_processor.user_info[user.name]['notification_subscriptions'].pop(notification_id) self.event_processor.reverse_user_info = calculate_reverse_user_info(self.event_processor.user_info)
def on_start(self): super(NotificationWorker, self).on_start() self.smtp_client = setting_up_smtp_client() # ------------------------------------------------------------------------------------ # Start by loading the user info and reverse user info dictionaries # ------------------------------------------------------------------------------------ try: self.user_info = self.load_user_info() self.reverse_user_info = calculate_reverse_user_info(self.user_info) log.info("On start up, notification workers loaded the following user_info dictionary: %s" % self.user_info) log.info("The calculated reverse user info: %s" % self.reverse_user_info) except NotFound as exc: if exc.message.find("users_index") > -1: log.warning("Notification workers found on start up that users_index have not been loaded yet.") else: raise NotFound(exc.message) # ------------------------------------------------------------------------------------ # Create an event subscriber for Reload User Info events # ------------------------------------------------------------------------------------ def reload_user_info(event_msg, headers): """ Callback method for the subscriber to ReloadUserInfoEvent """ notification_id = event_msg.notification_id log.info( "(Notification worker received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id ) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) self.test_hook(self.user_info, self.reverse_user_info) log.debug("After a reload, the user_info: %s" % self.user_info) log.debug("The recalculated reverse_user_info: %s" % self.reverse_user_info) # the subscriber for the ReloadUSerInfoEvent self.reload_user_info_subscriber = EventSubscriber(event_type="ReloadUserInfoEvent", callback=reload_user_info) self.reload_user_info_subscriber.start() # ------------------------------------------------------------------------------------ # Create an event subscriber for all events that are of interest for notifications # ------------------------------------------------------------------------------------ self.event_subscriber = EventSubscriber(queue_name="uns_queue", callback=self.process_event) self.event_subscriber.start()
def on_start(self): super(NotificationWorker,self).on_start() self.reverse_user_info = None self.user_info = None #------------------------------------------------------------------------------------ # Start by loading the user info and reverse user info dictionaries #------------------------------------------------------------------------------------ try: self.user_info = self.load_user_info() self.reverse_user_info = calculate_reverse_user_info(self.user_info) log.debug("On start up, notification workers loaded the following user_info dictionary: %s" % self.user_info) log.debug("The calculated reverse user info: %s" % self.reverse_user_info ) except NotFound as exc: if exc.message.find('users_index') > -1: log.warning("Notification workers found on start up that users_index have not been loaded yet.") else: raise NotFound(exc.message) #------------------------------------------------------------------------------------ # Create an event subscriber for Reload User Info events #------------------------------------------------------------------------------------ def reload_user_info(event_msg, headers): ''' Callback method for the subscriber to ReloadUserInfoEvent ''' notification_id = event_msg.notification_id log.debug("(Notification worker received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) self.test_hook(self.user_info, self.reverse_user_info) log.debug("After a reload, the user_info: %s" % self.user_info) log.debug("The recalculated reverse_user_info: %s" % self.reverse_user_info) # the subscriber for the ReloadUSerInfoEvent self.reload_user_info_subscriber = EventSubscriber( event_type="ReloadUserInfoEvent", origin='UserNotificationService', callback=reload_user_info ) self.add_endpoint(self.reload_user_info_subscriber)
def reload_user_info(event_msg, headers): ''' Callback method for the subscriber to ReloadUserInfoEvent ''' try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) self.test_hook(self.user_info, self.reverse_user_info)
def delete_notification_from_user_info(self, notification_id): ''' Helper method to delete the notification from the user_info dictionary ''' for user_name, value in self.event_processor.user_info.iteritems(): for notif in value['notifications']: if notification_id == notif._id: # remove the notification value['notifications'].remove(notif) # remove the notification_subscription self.event_processor.user_info[user_name]['notification_subscriptions'].pop(notification_id) self.event_processor.reverse_user_info = calculate_reverse_user_info(self.event_processor.user_info)
def update_user_info_dictionary(self, user, notification_subscription): ''' Update the user info and reverse user info dictionaries. ''' if self.user_info.has_key(user.name): # the user is already known by the EventProcessor self.user_info[user.name]['notifications'].append(notification_subscription._res_obj) self.user_info[user.name]['notification_subscriptions'][notification_subscription._res_obj._id] = notification_subscription else: # it is a new user self.user_info[user.name] = { 'user_contact' : user.contact, 'notifications' : [notification_subscription._res_obj], 'notification_subscriptions' : { notification_subscription._res_obj._id : notification_subscription}} self.reverse_user_info = calculate_reverse_user_info(self.user_info)
def reload_user_info(event_msg, headers): ''' Callback method for the subscriber to ReloadUserInfoEvent ''' notification_id = event_msg.notification_id log.debug("(UNS instance received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) log.debug("(UNS instance) After a reload, the user_info: %s" % self.user_info) log.debug("(UNS instance) The recalculated reverse_user_info: %s" % self.reverse_user_info)
def reload_user_info(event_msg, headers): ''' Callback method for the subscriber to ReloadUserInfoEvent ''' notification_id = event_msg.notification_id log.debug("(UNS instance received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) log.debug("(UNS instance) After a reload, the user_info: %s" % self.user_info) log.debug("(UNS instance) The recalculated reverse_user_info: %s" % self.reverse_user_info)
def update_user_info_dictionary(self, user, notification_subscription): """ Update the user info and reverse user info dictionaries. @param user UserInfo object @param notification_subscription NotificationSubscription object """ if self.user_info.has_key(user._id): # the user is already known by the EventProcessor self.user_info[user._id]['notifications'].append(notification_subscription._res_obj) self.user_info[user._id]['notification_subscriptions'][notification_subscription._res_obj._id] = notification_subscription else: # it is a new user self.user_info[user._id] = { 'user_contact' : user.contact, 'notifications' : [notification_subscription._res_obj], 'notification_subscriptions' : { notification_subscription._res_obj._id : notification_subscription}} self.reverse_user_info = calculate_reverse_user_info(self.user_info)
def reload_user_info(event_msg, headers): """ Callback method for the subscriber to ReloadUserInfoEvent """ notification_id = event_msg.notification_id log.info( "(Notification worker received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id ) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info(self.user_info) self.test_hook(self.user_info, self.reverse_user_info) log.debug("After a reload, the user_info: %s" % self.user_info) log.debug("The recalculated reverse_user_info: %s" % self.reverse_user_info)
def update_user_info_dictionary(self, user_id, new_notification, old_notification): #------------------------------------------------------------------------------------ # Remove the old notifications #------------------------------------------------------------------------------------ if old_notification in self.event_processor.user_info[user_id]['notifications']: # remove from notifications list self.event_processor.user_info[user_id]['notifications'].remove(old_notification) #------------------------------------------------------------------------------------ # update the notification subscription object #------------------------------------------------------------------------------------ # get the old notification_subscription notification_subscription = self.event_processor.user_info[user_id]['notification_subscriptions'].pop(old_notification._id) # update that old notification subscription notification_subscription._res_obj = new_notification # feed the updated notification subscription back into the user info dictionary self.event_processor.user_info[user_id]['notification_subscriptions'][old_notification._id] = notification_subscription #------------------------------------------------------------------------------------ # find the already existing notifications for the user #------------------------------------------------------------------------------------ notifications = self.event_processor.user_info[user_id]['notifications'] notifications.append(new_notification) #------------------------------------------------------------------------------------ # update the user info - contact information, notifications #------------------------------------------------------------------------------------ user = self.clients.resource_registry.read(user_id) self.event_processor.user_info[user_id]['user_contact'] = user.contact self.event_processor.user_info[user_id]['notifications'] = notifications self.event_processor.reverse_user_info = calculate_reverse_user_info(self.event_processor.user_info)
def on_start(self): super(NotificationWorker, self).on_start() self.reverse_user_info = None self.user_info = None #------------------------------------------------------------------------------------ # Start by loading the user info and reverse user info dictionaries #------------------------------------------------------------------------------------ try: self.user_info = self.load_user_info() self.reverse_user_info = calculate_reverse_user_info( self.user_info) log.debug( "On start up, notification workers loaded the following user_info dictionary: %s" % self.user_info) log.debug("The calculated reverse user info: %s" % self.reverse_user_info) except NotFound as exc: if exc.message.find('users_index') > -1: log.warning( "Notification workers found on start up that users_index have not been loaded yet." ) else: raise NotFound(exc.message) #------------------------------------------------------------------------------------ # Create an event subscriber for Reload User Info events #------------------------------------------------------------------------------------ def reload_user_info(event_msg, headers): ''' Callback method for the subscriber to ReloadUserInfoEvent ''' notification_id = event_msg.notification_id log.debug( "(Notification worker received a ReloadNotificationEvent. The relevant notification_id is %s" % notification_id) try: self.user_info = self.load_user_info() except NotFound: log.warning("ElasticSearch has not yet loaded the user_index.") self.reverse_user_info = calculate_reverse_user_info( self.user_info) self.test_hook(self.user_info, self.reverse_user_info) log.debug("After a reload, the user_info: %s" % self.user_info) log.debug("The recalculated reverse_user_info: %s" % self.reverse_user_info) # the subscriber for the ReloadUSerInfoEvent self.reload_user_info_subscriber = EventSubscriber( event_type=OT.ReloadUserInfoEvent, origin='UserNotificationService', callback=reload_user_info) self.add_endpoint(self.reload_user_info_subscriber)