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)
Example #3
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', []),
             }
Example #6
0
 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)
     ]