def postUpdateHook(cls, awards, updated_attr_list, is_new_list): # Note, updated_attr_list will always be empty, for now # Still needs to be implemented in updateMerge # See helpers.EventManipulator events = [] for (award, updated_attrs) in zip(awards, updated_attr_list): event = award.event if event not in events: events.append(event) for event in events: if event.get().within_a_day: try: NotificationHelper.send_award_update(event.get()) except Exception: logging.error("Error sending award update for {}".format( event.id())) try: TBANSHelper.awards(event.get()) except Exception: logging.error("Error sending award update for {}".format( event.id())) # Enqueue task to calculate district points for event in events: taskqueue.add(url='/tasks/math/do/district_points_calc/{}'.format( event.id()), method='GET')
def test_awards(self): from notifications.awards_updated import AwardsUpdatedNotification with patch.object(TBANSHelper, '_send') as mock_send: TBANSHelper.awards(self.event) # Make sure we sent to FCM/webhooks mock_send.assert_called_once() notification = mock_send.call_args[0][1] self.assertTrue(isinstance(notification, AwardsNotification)) self.assertEqual(notification.event, self.event)
def post(self): self._require_admin() user_id = self.user_bundle.account.key.id() notification_type = self.request.get('type') if notification_type == "awards": event_key = self.request.get('event_key') event = Event.get_by_id(event_key) if not event: self.template_values.update( {'error': 'No event for key {}'.format(event_key)}) return self.redirect('/admin/tbans') TBANSHelper.awards(event, user_id) elif notification_type == "ping": clients = MobileClient.clients([user_id]) for client in clients: TBANSHelper.ping(client) return self.redirect('/admin/tbans')
def postUpdateHook(cls, awards, updated_attr_list, is_new_list): # Note, updated_attr_list will always be empty, for now # Still needs to be implemented in updateMerge # See helpers.EventManipulator events = [] for (award, updated_attrs) in zip(awards, updated_attr_list): event = award.event if event not in events: events.append(event) for event in events: if event.get().within_a_day: try: NotificationHelper.send_award_update(event.get()) except Exception: logging.error("Error sending award update for {}".format( event.id())) try: TBANSHelper.awards(event.get()) except Exception, exception: logging.error("Error sending {} award updates: {}".format( event.id(), exception)) logging.error(traceback.format_exc())
def post(self): self._require_admin() user_id = self.user_bundle.account.key.id() notification_type = self.request.get('type') if notification_type == "alliance_selection": event_key = self.request.get('event_key') event = Event.get_by_id(event_key) if not event: self.template_values.update({ 'error': 'No event for key {}'.format(event_key) }) return self.redirect('/admin/tbans') TBANSHelper.alliance_selection(event, user_id) elif notification_type == "awards": event_key = self.request.get('event_key') event = Event.get_by_id(event_key) if not event: self.template_values.update({ 'error': 'No event for key {}'.format(event_key) }) return self.redirect('/admin/tbans') TBANSHelper.awards(event, user_id) elif notification_type == "event_level": match_key = self.request.get('match_key') match = Match.get_by_id(match_key) if not match: self.template_values.update({ 'error': 'No match for key {}'.format(match_key) }) return self.redirect('/admin/tbans') TBANSHelper.event_level(match, user_id) elif notification_type == "event_schedule": event_key = self.request.get('event_key') event = Event.get_by_id(event_key) if not event: self.template_values.update({ 'error': 'No event for key {}'.format(event_key) }) return self.redirect('/admin/tbans') TBANSHelper.event_schedule(event, user_id) elif notification_type == "match_score": match_key = self.request.get('match_key') match = Match.get_by_id(match_key) if not match: self.template_values.update({ 'error': 'No match for key {}'.format(match_key) }) return self.redirect('/admin/tbans') TBANSHelper.match_score(match, user_id) elif notification_type == "match_upcoming": match_key = self.request.get('match_key') match = Match.get_by_id(match_key) if not match: self.template_values.update({ 'error': 'No match for key {}'.format(match_key) }) return self.redirect('/admin/tbans') TBANSHelper.match_upcoming(match, user_id) elif notification_type == "match_video": match_key = self.request.get('match_key') match = Match.get_by_id(match_key) if not match: self.template_values.update({ 'error': 'No match for key {}'.format(match_key) }) return self.redirect('/admin/tbans') TBANSHelper.match_video(match, user_id) elif notification_type == "ping": clients = MobileClient.clients([user_id]) for client in clients: TBANSHelper.ping(client) return self.redirect('/admin/tbans')