def postUpdateHook(cls, event_details_list, updated_attr_list, is_new_list): """ To run after models have been updated """ for (event_details, updated_attrs) in zip(event_details_list, updated_attr_list): event = Event.get_by_id(event_details.key.id()) if event.within_a_day and "alliance_selections" in updated_attrs: try: NotificationHelper.send_alliance_update(event) except Exception: logging.error( "Error sending alliance update notification for {}". format(event.key_name)) logging.error(traceback.format_exc()) try: TBANSHelper.alliance_selection(event) except Exception: logging.error( "Error sending alliance update notification for {}". format(event.key_name)) logging.error(traceback.format_exc()) # Enqueue task to calculate district points try: taskqueue.add( url='/tasks/math/do/district_points_calc/{}'.format( event.key.id()), method='GET') except Exception: logging.error( "Error enqueuing district_points_calc for {}".format( event.key.id())) logging.error(traceback.format_exc()) # Enqueue task to calculate event team status try: taskqueue.add(url='/tasks/math/do/event_team_status/{}'.format( event.key.id()), method='GET') except Exception: logging.error( "Error enqueuing event_team_status for {}".format( event.key.id())) logging.error(traceback.format_exc()) try: FirebasePusher.update_event_details(event_details) except Exception: logging.warning("Firebase update_event_details failed!")
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')