def deleteInvalidMatches(self, match_list, event): """ A match is invalid iff it is an elim match that has not been played and the same alliance already won in 2 match numbers in the same set. """ red_win_counts = defaultdict(int) # key: <comp_level><set_number> blue_win_counts = defaultdict(int) # key: <comp_level><set_number> for match in match_list: if match.has_been_played and match.comp_level in Match.ELIM_LEVELS: key = '{}{}'.format(match.comp_level, match.set_number) if match.winning_alliance == 'red': red_win_counts[key] += 1 elif match.winning_alliance == 'blue': blue_win_counts[key] += 1 return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and not match.has_been_played: if event.playoff_type != PlayoffType.ROUND_ROBIN_6_TEAM or match.comp_level == 'f': # Don't delete round robin semifinal matches key = '{}{}'.format(match.comp_level, match.set_number) n = 3 if event.playoff_type == PlayoffType.BO5_FINALS else 2 if red_win_counts[key] == n or blue_win_counts[key] == n: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning( "Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def deleteInvalidMatches(self, match_list): """ A match is invalid iff it is an elim match that has not been played and the same alliance already won in 2 match numbers in the same set. """ red_win_counts = defaultdict(int) # key: <comp_level><set_number> blue_win_counts = defaultdict(int) # key: <comp_level><set_number> for match in match_list: if match.has_been_played and match.comp_level in Match.ELIM_LEVELS: key = '{}{}'.format(match.comp_level, match.set_number) if match.winning_alliance == 'red': red_win_counts[key] += 1 elif match.winning_alliance == 'blue': blue_win_counts[key] += 1 return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and not match.has_been_played: key = '{}{}'.format(match.comp_level, match.set_number) if red_win_counts[key] == 2 or blue_win_counts[key] == 2: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning("Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def deleteInvalidMatches(self, match_list): """ A match is invalid iff it is an elim match where the match number is 3 and the same alliance won in match numbers 1 and 2 of the same set. """ matches_by_key = {} for match in match_list: matches_by_key[match.key_name] = match return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and match.match_number == 3 and ( not match.has_been_played): match_1 = matches_by_key.get( Match.renderKeyName(match.event.id(), match.comp_level, match.set_number, 1)) match_2 = matches_by_key.get( Match.renderKeyName(match.event.id(), match.comp_level, match.set_number, 2)) if match_1 is not None and match_2 is not None and\ match_1.has_been_played and match_2.has_been_played and\ match_1.winning_alliance == match_2.winning_alliance: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning( "Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def deleteInvalidMatches(self, match_list): """ A match is invalid iff it is an elim match where the match number is 3 and the same alliance won in match numbers 1 and 2 of the same set. """ matches_by_key = {} for match in match_list: matches_by_key[match.key_name] = match return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and match.match_number == 3 and (not match.has_been_played): match_1 = matches_by_key.get(Match.renderKeyName(match.event.id(), match.comp_level, match.set_number, 1)) match_2 = matches_by_key.get(Match.renderKeyName(match.event.id(), match.comp_level, match.set_number, 2)) if match_1 is not None and match_2 is not None and\ match_1.has_been_played and match_2.has_been_played and\ match_1.winning_alliance == match_2.winning_alliance: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning("Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def get(self, event_key, comp_level, to_delete): self._require_admin() event = Event.get_by_id(event_key) if not event: self.abort(404) organized_matches = MatchHelper.organizeMatches(event.matches) if comp_level not in organized_matches: self.abort(400) return matches_to_delete = [] if to_delete == 'all': matches_to_delete = [m for m in organized_matches[comp_level]] elif to_delete == 'unplayed': matches_to_delete = [ m for m in organized_matches[comp_level] if not m.has_been_played ] delete_count = len(matches_to_delete) if matches_to_delete: MatchManipulator.delete(matches_to_delete) self.redirect("/admin/event/{}?deleted={}#matches".format( event_key, delete_count))
def deleteInvalidMatches(self, match_list): """ A match is invalid iff it is an elim match that has not been played and the same alliance already won in 2 match numbers in the same set. """ red_win_counts = defaultdict(int) # key: <comp_level><set_number> blue_win_counts = defaultdict(int) # key: <comp_level><set_number> for match in match_list: if match.has_been_played and match.comp_level in Match.ELIM_LEVELS: key = '{}{}'.format(match.comp_level, match.set_number) if match.winning_alliance == 'red': red_win_counts[key] += 1 elif match.winning_alliance == 'blue': blue_win_counts[key] += 1 return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and not match.has_been_played: key = '{}{}'.format(match.comp_level, match.set_number) if red_win_counts[key] == 2 or blue_win_counts[key] == 2: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning( "Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def deleteInvalidMatches(self, match_list, event): """ A match is invalid iff it is an elim match that has not been played and the same alliance already won in 2 match numbers in the same set. """ red_win_counts = defaultdict(int) # key: <comp_level><set_number> blue_win_counts = defaultdict(int) # key: <comp_level><set_number> for match in match_list: if match.has_been_played and match.comp_level in Match.ELIM_LEVELS: key = '{}{}'.format(match.comp_level, match.set_number) if match.winning_alliance == 'red': red_win_counts[key] += 1 elif match.winning_alliance == 'blue': blue_win_counts[key] += 1 return_list = [] for match in match_list: if match.comp_level in Match.ELIM_LEVELS and not match.has_been_played: if event.playoff_type != PlayoffType.ROUND_ROBIN_6_TEAM or match.comp_level == 'f': # Don't delete round robin semifinal matches key = '{}{}'.format(match.comp_level, match.set_number) n = 3 if event.playoff_type == PlayoffType.BO5_FINALS else 2 if red_win_counts[key] == n or blue_win_counts[key] == n: try: MatchManipulator.delete(match) logging.warning("Deleting invalid match: %s" % match.key_name) except: logging.warning("Tried to delete invalid match, but failed: %s" % match.key_name) continue return_list.append(match) return return_list
def post(self, match_key_id): self._require_admin() logging.warning("Deleting %s at the request of %s / %s" % ( match_key_id, self.user_bundle.user.user_id(), self.user_bundle.user.email())) match = Match.get_by_id(match_key_id) event_key_id = match.event.id() MatchManipulator.delete(match) self.redirect("/admin/event/%s?deleted=%s" % (event_key_id, match_key_id))
def post(self, match_key_id): self._require_admin() logging.warning("Deleting %s at the request of %s / %s" % (match_key_id, self.user_bundle.user.user_id(), self.user_bundle.user.email())) match = Match.get_by_id(match_key_id) event_key_id = match.event.id() MatchManipulator.delete(match) self.redirect("/admin/event/%s?deleted=%s" % (event_key_id, match_key_id))
def post(self, event_key_id): logging.warning("Deleting %s at the request of %s / %s" % ( event_key_id, users.get_current_user().user_id(), users.get_current_user().email())) event = Event.get_by_id(event_key_id) matches = Match.query(Match.event == event.key).fetch(5000) MatchManipulator.delete(matches) event_teams = EventTeam.query(EventTeam.event == event.key).fetch(5000) EventTeamManipulator.delete(event_teams) EventManipulator.delete(event) self.redirect("/admin/events?deleted=%s" % event_key_id)
def post(self, event_key_id): self._require_admin() logging.warning("Deleting %s at the request of %s / %s" % (event_key_id, self.user_bundle.user.user_id(), self.user_bundle.user.email())) event = Event.get_by_id(event_key_id) matches = Match.query(Match.event == event.key).fetch(5000) MatchManipulator.delete(matches) event_teams = EventTeam.query(EventTeam.event == event.key).fetch(5000) EventTeamManipulator.delete(event_teams) EventManipulator.delete(event) self.redirect("/admin/events?deleted=%s" % event_key_id)
def post(self): self._require_admin() event = Event.get_by_id(self.request.get("event_key_name")) matches_to_delete = list() match_keys_to_delete = list() if event is not None: for match in Match.query(Match.event == event.key): if match.key.id() != match.key_name: matches_to_delete.append(match) match_keys_to_delete.append(match.key_name) MatchManipulator.delete(matches_to_delete) self.template_values.update({ "match_keys_deleted": match_keys_to_delete, "tried_delete": True }) path = os.path.join(os.path.dirname(__file__), '../../templates/admin/matches_cleanup.html') self.response.out.write(template.render(path, self.template_values))
def post(self): self._require_admin() event = Event.get_by_id(self.request.get("event_key_name")) matches_to_delete = list() match_keys_to_delete = list() if event is not None: for match in Match.query(Match.event == event.key): if match.key.id() != match.key_name: matches_to_delete.append(match) match_keys_to_delete.append(match.key_name) MatchManipulator.delete(matches_to_delete) self.template_values.update({ "match_keys_deleted": match_keys_to_delete, "tried_delete": True }) path = os.path.join(os.path.dirname(__file__), '../../templates/admin/matches_cleanup.html') self.response.out.write(template.render(path, self.template_values))
def testApiCacheClear(self): self.assertEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll(flushed=True) # this shouldn't evict any caches EventManipulator.createOrUpdate(self.event_2010sc_1) EventTeamManipulator.createOrUpdate(self.eventteam_2010sc_frc1) EventTeamManipulator.createOrUpdate(self.eventteam_2010sc_frc2) AwardManipulator.createOrUpdate(self.award1_1) MatchManipulator.createOrUpdate(self.match1_1) TeamManipulator.createOrUpdate(self.team_frc1_1) TeamManipulator.createOrUpdate(self.team_frc2_1) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc1_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc2_cache_key), None) # updating an event EventManipulator.createOrUpdate(self.event_2010sc_2) self.assertEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # updating a team TeamManipulator.createOrUpdate(self.team_frc1_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # updating a match MatchManipulator.createOrUpdate(self.match1_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # updating an award AwardManipulator.createOrUpdate(self.award1_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # deleting an award AwardManipulator.delete(self.award1_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # deleting a match MatchManipulator.delete(self.match1_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # deleting a team TeamManipulator.delete(self.team_frc2_2) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # deleting an event EventManipulator.delete(self.event_2010sc_2) self.assertEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertEqual(memcache.get(self.team_frc2_cache_key), None) self.resetAll() # deleting an eventteam EventTeamManipulator.delete(self.eventteam_2010sc_frc1) self.assertNotEqual(memcache.get(self.eventlist_2010_cache_key), None) self.assertNotEqual(memcache.get(self.event_2010sc_cache_key), None) self.assertEqual(memcache.get(self.eventteams_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventmatches_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventstats_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventrankings_2010sc_cache_key), None) self.assertNotEqual(memcache.get(self.eventawards_2010sc_cache_key), None) self.assertEqual(memcache.get(self.team_frc1_cache_key), None) self.assertNotEqual(memcache.get(self.team_frc2_cache_key), None)