def test_walk_subscriptions(self): subs1 = list((path_in_site(obj), sub) for obj, n, sub in walk_subscriptions(self.portal)) self.assertEqual(len(subs1), 2) self.assertTrue(('f1/b/2', self.user2_sub) in subs1) self.assertTrue(('f1/b', self.user1_sub) in subs1) subs2 = list((path_in_site(obj), sub) for obj, n, sub in walk_subscriptions(self.portal['f1']['b']['2'])) self.assertEqual(len(subs2), 1) self.assertTrue(('f1/b/2', self.user2_sub) in subs1) subs3 = list(walk_subscriptions(self.portal['f1']['a'])) self.assertEqual(len(subs3), 0)
def test_walk_subscriptions(self): subs1 = list((path_in_site(obj), sub) for obj, n, sub in walk_subscriptions(self.portal)) self.assertEqual(len(subs1), 2) self.assertTrue(('f1/b/2', self.user2_sub) in subs1) self.assertTrue(('f1/b', self.user1_sub) in subs1) subs2 = list( (path_in_site(obj), sub) for obj, n, sub in walk_subscriptions(self.portal['f1']['b']['2'])) self.assertEqual(len(subs2), 1) self.assertTrue(('f1/b/2', self.user2_sub) in subs1) subs3 = list(walk_subscriptions(self.portal['f1']['a'])) self.assertEqual(len(subs3), 0)
def user_subscriptions(self, user, cutoff_level=None): """ Returns all user subscriptions in the portal. Use with caution as this iterates almost all the objects in site. You can use `cutoff_level` to limit the depth. """ out = [] user_id = user.getId() for obj, n, subscription in utils.walk_subscriptions( self.getSite(), cutoff_level): if not isinstance(subscription, AccountSubscription): continue if subscription.user_id != user_id: continue out.append({ 'object': obj, 'notif_type': subscription.notif_type, 'content_types': getattr(subscription, 'content_types', []), 'lang': subscription.lang }) return out
def test_anonymous_account_subscription(self): """ Add anonymous notification. This sends an email with a confirmation key. Confirm with confirm method and verify if subscription is in the container. """ diverted_mail = EmailTool.divert_mail() notif_tool = self.portal.getNotificationTool() notif_tool.add_anonymous_subscription(email='*****@*****.**', lang='en', location='', notif_type='instant', content_types=[]) assert diverted_mail[0][1] == ['*****@*****.**'] assert diverted_mail[0][3] == '*****@*****.**' assert diverted_mail[0][0].find('confirm?key=') != -1 confirm_key = re.search('confirm\?key=(\w+)', diverted_mail[0][0]).group(1) notif_tool.confirm(key=confirm_key) for obj, n, sub in walk_subscriptions(self.portal): if sub.email == '*****@*****.**': break else: raise "No subscription found" EmailTool.divert_mail(False)
def admin_get_subscriptions(self, user_query=''): user_query = user_query.strip() for obj, sub_id, subscription in utils.walk_subscriptions( self.getSite()): user = subscription.to_string(obj) if not user_query or re.match('.*%s.*' % user_query, user, re.IGNORECASE): yield { 'user': user, 'location': relative_object_path(obj, self.getSite()), 'sub_id': sub_id, 'lang': subscription.lang, 'notif_type': subscription.notif_type, 'content_types': getattr(subscription, 'content_types', []), }
def admin_get_subscriptions(self, user_query=''): user_query = user_query.strip() for obj, sub_id, subscription in utils.walk_subscriptions( self.getSite()): user = subscription.to_string(obj) if not user_query or re.match('.*%s.*' % user_query, user, re.IGNORECASE): yield { 'user': user, 'location': relative_object_path(obj, self.getSite()), 'sub_id': sub_id, 'lang': subscription.lang, 'notif_type': subscription.notif_type, 'content_types': getattr(subscription, 'content_types', []), }
def test_anonymous_account_subscription(self): """ Add anonymous notification. This sends an email with a confirmation key. Confirm with confirm method and verify if subscription is in the container. """ diverted_mail = EmailTool.divert_mail() notif_tool = self.portal.getNotificationTool() notif_tool.add_anonymous_subscription(email='*****@*****.**', lang='en', location='', notif_type='instant') assert diverted_mail[0][1] == ['*****@*****.**'] assert diverted_mail[0][2] == '*****@*****.**' assert diverted_mail[0][0].find('confirm?key=') != -1 confirm_key = re.search('confirm\?key=(\w+)', diverted_mail[0][0]).group(1) notif_tool.confirm(key=confirm_key) for obj, n, sub in walk_subscriptions(self.portal): if sub.email == '*****@*****.**': break else: raise "No subscription found" EmailTool.divert_mail(False)
def user_subscriptions(self, user, cutoff_level=None): """ Returns all user subscriptions in the portal. Use with caution as this iterates almost all the objects in site. You can use `cutoff_level` to limit the depth. """ out = [] user_id = user.getId() for obj, n, subscription in utils.walk_subscriptions(self.getSite(), cutoff_level): if not isinstance(subscription, AccountSubscription): continue if subscription.user_id != user_id: continue out.append({ 'object': obj, 'notif_type': subscription.notif_type, 'content_types': getattr(subscription, 'content_types', []), 'lang': subscription.lang }) return out
def subscr(): return set((path_in_site(obj), sub.notif_type, sub.user_id) for obj, n, sub in walk_subscriptions(self.portal))
def walk_site_subscriptions(self): return set((sub.user_id, path_in_site(obj), sub.notif_type, sub.lang) for obj, n, sub in walk_subscriptions(self.portal))
def walk_site_subscriptions(self): return set((sub.user_id, path_in_site(obj), sub.notif_type, sub.lang) for obj, n, sub in walk_subscriptions(self.portal))
def get_with_cutoff(cutoff): return [path_in_site(obj) for obj, n, sub in walk_subscriptions(self.portal, cutoff)]
def subscr(): return set((path_in_site(obj), sub.notif_type, sub.user_id) for obj, n, sub in walk_subscriptions(self.portal))
def get_with_cutoff(cutoff): return [ path_in_site(obj) for obj, n, sub in walk_subscriptions(self.portal, cutoff) ]