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)
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)
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)
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))