Example #1
0
    def _replace_rules(self, arg, req):
        subscriptions = []
        for transport in self._iter_transports():
            format_ = req.args.getfirst('format-' + transport)
            format_ = self._normalize_format(format_, transport)
            req.session.set('notification.format.%s' % transport, format_, '')
            adverbs = req.args.getlist('adverb-' + transport)
            classes = req.args.getlist('class-' + transport)
            for idx in xrange(min(len(adverbs), len(classes))):
                subscriptions.append({'distributor': transport,
                                      'format': format_,
                                      'adverb': adverbs[idx],
                                      'class': classes[idx]})

        sid = req.session.sid
        authenticated = req.session.authenticated
        with self.env.db_transaction:
            Subscription.replace_all(self.env, sid, authenticated,
                                     subscriptions)
Example #2
0
    def _replace_rules(self, arg, req):
        subscriptions = []
        for transport in self._iter_transports():
            format_ = req.args.getfirst('format-' + transport)
            styles = self._get_supported_styles(transport)
            if not styles:
                format_ = None
            elif format_ not in styles:
                format_ = styles[0]
            adverbs = req.args.getlist('adverb-' + transport)
            classes = req.args.getlist('class-' + transport)
            for idx in xrange(min(len(adverbs), len(classes))):
                subscriptions.append({'distributor': transport,
                                      'format': format_,
                                      'adverb': adverbs[idx],
                                      'class': classes[idx]})

        sid = req.session.sid
        authenticated = req.session.authenticated
        with self.env.db_transaction:
            Subscription.replace_all(self.env, sid, authenticated,
                                     subscriptions)
Example #3
0
    def _replace_rules(self, arg, req):
        subscriptions = []
        for transport in self._iter_transports():
            format_ = req.args.getfirst('format-' + transport)
            styles = self._get_supported_styles(transport)
            if not styles:
                format_ = None
            elif format_ not in styles:
                format_ = styles[0]
            adverbs = req.args.getlist('adverb-' + transport)
            classes = req.args.getlist('class-' + transport)
            for idx in xrange(min(len(adverbs), len(classes))):
                subscriptions.append({
                    'distributor': transport,
                    'format': format_,
                    'adverb': adverbs[idx],
                    'class': classes[idx]
                })

        sid = req.session.sid
        authenticated = req.session.authenticated
        with self.env.db_transaction:
            Subscription.replace_all(self.env, sid, authenticated,
                                     subscriptions)
Example #4
0
    def test_replace_all(self):
        def query(sid, authenticated):
            return self.env.db_query(
                """\
                SELECT distributor, format, priority, adverb, class
                FROM notify_subscription
                WHERE sid=%s AND authenticated=%s
                ORDER BY distributor, priority""", (sid, authenticated))

        req = MockRequest(self.env, authname='joe')
        sess = req.session
        items = [
            ('email', 'text/plain', 'always', 'TicketSubscriber1'),
            ('email', 'text/html', 'always', 'TicketSubscriber2'),
            ('email', 'text/html', 'always', 'TicketSubscriber3'),
            ('xmpp', 'text/html', 'never', 'XmppSubscriber1'),
            ('xmpp', 'text/plain', 'always', 'XmppSubscriber2'),
        ]
        items = [
            dict(zip(('distributor', 'format', 'adverb', 'class'), item))
            for item in items
        ]
        Subscription.replace_all(self.env, sess.sid, sess.authenticated, items)
        rows = query('joe', 1)
        expected = [
            ('email', 'text/plain', 1, 'always', 'TicketSubscriber1'),
            ('email', 'text/html', 2, 'always', 'TicketSubscriber2'),
            ('email', 'text/html', 3, 'always', 'TicketSubscriber3'),
            ('xmpp', 'text/html', 1, 'never', 'XmppSubscriber1'),
            ('xmpp', 'text/plain', 2, 'always', 'XmppSubscriber2'),
        ]
        self.assertEqual(expected, rows)

        items = [
            ('email', 'text/plain', 'never', 'TicketSubscriber3'),
            ('xmpp', 'text/html', 'always', 'XmppSubscriber1'),
        ]
        items = [
            dict(zip(('distributor', 'format', 'adverb', 'class'), item))
            for item in items
        ]
        Subscription.replace_all(self.env, sess.sid, sess.authenticated, items)
        rows = query('joe', 1)
        expected = [
            ('email', 'text/plain', 1, 'never', 'TicketSubscriber3'),
            ('xmpp', 'text/html', 1, 'always', 'XmppSubscriber1'),
        ]
        self.assertEqual(expected, rows)

        Subscription.replace_all(self.env, sess.sid, sess.authenticated, [])
        self.assertEqual([], query('joe', 1))