def get(self, key_name): fms_df = DatafeedFMSAPI('v2.0') fms_details = fms_df.getTeamDetails(date.today().year, key_name) if fms_details: team, district_team, robot = fms_details else: fms_team = None district_team = None robot = None if team: team = TeamManipulator.createorUpdate(team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate(district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': success, 'district': district_team, 'robot': robot, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) if event.event_type_enum == EventType.CMP_FINALS: logging.info("Skipping Einstein alliance selections") return alliance_selections = df.getEventAlliances(event_key) if alliance_selections and event.alliance_selections != alliance_selections: event.alliance_selections_json = json.dumps(alliance_selections) event._alliance_selections = None event.dirty = True EventManipulator.createOrUpdate(event) template_values = { 'alliance_selections': alliance_selections, 'event_name': event.key_name } path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) rankings, rankings2 = df.getEventRankings(event_key) if event and event.remap_teams: EventHelper.remapteams_rankings(rankings, event.remap_teams) EventHelper.remapteams_rankings2(rankings2, event.remap_teams) event_details = EventDetails(id=event_key, rankings=rankings, rankings2=rankings2) EventDetailsManipulator.createOrUpdate(event_details) template_values = { 'rankings': rankings, 'event_name': event_details.key.id() } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_rankings_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): fms_df = DatafeedFMSAPI('v2.0') fms_details = fms_df.getTeamDetails(date.today().year, key_name) if fms_details: team, district_team, robot = fms_details else: fms_team = None district_team = None robot = None if team: team = TeamManipulator.createorUpdate(team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate( district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': success, 'district': district_team, 'robot': robot, } path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') fmsapi_events, event_list_districts = df.getEventList(year) events = EventManipulator.createOrUpdate(fmsapi_events) fmsapi_districts = df.getDistrictList(year) merged_districts = DistrictManipulator.mergeModels( fmsapi_districts, event_list_districts) districts = DistrictManipulator.createOrUpdate(merged_districts) # Fetch event details for each event for event in events: taskqueue.add(queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/' + event.key_name, method='GET') template_values = { "events": events, "districts": districts, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() fmsapi_events, fmsapi_districts = df.getEventList(year) elasticsearch_events = df2.getEventList(year) merged_events = EventManipulator.mergeModels(fmsapi_events, elasticsearch_events) events = EventManipulator.createOrUpdate(merged_events) districts = DistrictManipulator.createOrUpdate(fmsapi_districts) # Fetch event details for each event for event in events: taskqueue.add( queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/'+event.key_name, method='GET' ) template_values = { "events": events, "districts": districts, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) models = df.getEventTeams(event_key) teams = [] district_teams = [] robots = [] for group in models: # models is a list of tuples (team, districtTeam, robot) if isinstance(group[0], Team): teams.append(group[0]) if isinstance(group[1], DistrictTeam): district_teams.append(group[1]) if isinstance(group[2], Robot): robots.append(group[2]) # Write new models teams = TeamManipulator.createOrUpdate(teams) district_teams = DistrictTeamManipulator.createOrUpdate(district_teams) robots = RobotManipulator.createOrUpdate(robots) if not teams: # No teams found registered for this event teams = [] # Build EventTeams event_teams = [ EventTeam(id=event.key_name + "_" + team.key_name, event=event.key, team=team.key, year=event.year) for team in teams ] # Delete eventteams of teams that are no longer registered if event.future: existing_event_team_keys = set( EventTeam.query(EventTeam.event == event.key).fetch( 1000, keys_only=True)) event_team_keys = set([et.key for et in event_teams]) et_keys_to_delete = existing_event_team_keys.difference( event_team_keys) EventTeamManipulator.delete_keys(et_keys_to_delete) event_teams = EventTeamManipulator.createOrUpdate(event_teams) if type(event_teams) is not list: event_teams = [event_teams] template_values = { 'event': event, 'event_teams': event_teams, } path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): # Combines data from three datafeeds with priorities: # 1) DatafeedFMSAPI # 2) DatafeedUsfirst (missing rookie year) # 3) DatafeedUsfirstLegacy (has all info) legacy_df = DatafeedUsfirstLegacy() usfirst_df = DatafeedUsfirst() fms_df = DatafeedFMSAPI('v2.0') # Start with lowest priority legacy_team = legacy_df.getTeamDetails(Team.get_by_id(key_name)) usfirst_team = usfirst_df.getTeamDetails(Team.get_by_id(key_name)) fms_details = fms_df.getTeamDetails(tba_config.MAX_YEAR, key_name) # Separate out the multiple models returned from FMSAPI call # Since we're only hitting one team at a time, the response won't # ever be paginated so we can ignore the possibility if fms_details and fms_details[0]: models, more_pages = fms_details fms_team, district_team, robot = models[0] else: fms_team = None district_team = None robot = None team = None if usfirst_team: team = TeamManipulator.updateMergeBase(usfirst_team, legacy_team) if fms_team: team = TeamManipulator.updateMergeBase(fms_team, team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate( district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) if team: team = TeamManipulator.createOrUpdate(team) success = True else: success = False logging.warning( "getTeamDetails failed for team: {}".format(key_name)) template_values = { 'key_name': key_name, 'team': team, 'success': success, 'district': district_team, 'robot': robot, } path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): existing_team = Team.get_by_id(key_name) fms_df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() year = datetime.date.today().year fms_details = fms_df.getTeamDetails(year, key_name) if fms_details: team, district_team, robot = fms_details[0] else: team = None district_team = None robot = None if team: team = TeamManipulator.mergeModels( team, df2.getTeamDetails(existing_team)) else: team = df2.getTeamDetails(existing_team) if team: team = TeamManipulator.createOrUpdate(team) # Clean up junk district teams # https://www.facebook.com/groups/moardata/permalink/1310068625680096/ dt_keys = DistrictTeam.query( DistrictTeam.team == existing_team.key, DistrictTeam.year == year).fetch(keys_only=True) keys_to_delete = set() for dt_key in dt_keys: if not district_team or dt_key.id() != district_team.key.id(): keys_to_delete.add(dt_key) DistrictTeamManipulator.delete_keys(keys_to_delete) if district_team: district_team = DistrictTeamManipulator.createOrUpdate( district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': team is not None, 'district': district_team, 'robot': robot, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI() new_matches = MatchManipulator.createOrUpdate(df.getMatches(event_key)) template_values = { 'matches': new_matches, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_matches_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') fmsapi_events, event_list_districts = df.getEventList(year) # All regular-season events can be inserted without any work involved. # We need to de-duplicate offseason events from the FRC Events API with a different code than the TBA event code fmsapi_events_offseason = [e for e in fmsapi_events if e.is_offseason] event_keys_to_put = set([e.key_name for e in fmsapi_events]) - set( [e.key_name for e in fmsapi_events_offseason]) events_to_put = [ e for e in fmsapi_events if e.key_name in event_keys_to_put ] matched_offseason_events, new_offseason_events = \ OffseasonEventHelper.categorize_offseasons(int(year), fmsapi_events_offseason) # For all matched offseason events, make sure the FIRST code matches the TBA FIRST code for tba_event, first_event in matched_offseason_events: tba_event.first_code = first_event.event_short events_to_put.append( tba_event) # Update TBA events - discard the FIRST event # For all new offseason events we can't automatically match, create suggestions SuggestionCreator.createDummyOffseasonSuggestions(new_offseason_events) events = EventManipulator.createOrUpdate(events_to_put) or [] fmsapi_districts = df.getDistrictList(year) merged_districts = DistrictManipulator.mergeModels( fmsapi_districts, event_list_districts) if merged_districts: districts = DistrictManipulator.createOrUpdate(merged_districts) else: districts = [] # Fetch event details for each event for event in events: taskqueue.add(queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/' + event.key_name, method='GET') template_values = { "events": events, "districts": districts, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') new_matches = MatchManipulator.createOrUpdate(df.getMatches(event_key)) template_values = { 'matches': new_matches, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_matches_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') new_matches = MatchManipulator.createOrUpdate(df.getMatches(event_key)) template_values = { 'matches': new_matches, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_matches_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): # Combines data from three datafeeds with priorities: # 1) DatafeedFMSAPI # 2) DatafeedUsfirst (missing rookie year) # 3) DatafeedUsfirstLegacy (has all info) legacy_df = DatafeedUsfirstLegacy() usfirst_df = DatafeedUsfirst() fms_df = DatafeedFMSAPI('v2.0') # Start with lowest priority legacy_team = legacy_df.getTeamDetails(Team.get_by_id(key_name)) usfirst_team = usfirst_df.getTeamDetails(Team.get_by_id(key_name)) fms_details = fms_df.getTeamDetails(tba_config.MAX_YEAR, key_name) # Separate out the multiple models returned from FMSAPI call # Since we're only hitting one team at a time, the response won't # ever be paginated so we can ignore the possibility if fms_details and fms_details[0]: models, more_pages = fms_details fms_team, district_team, robot = models[0] else: fms_team = None district_team = None robot = None team = None if usfirst_team: team = TeamManipulator.updateMergeBase(usfirst_team, legacy_team) if fms_team: team = TeamManipulator.updateMergeBase(fms_team, team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate(district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) if team: team = TeamManipulator.createOrUpdate(team) success = True else: success = False logging.warning("getTeamDetails failed for team: {}".format(key_name)) template_values = { 'key_name': key_name, 'team': team, 'success': success, 'district': district_team, 'robot': robot, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') fmsapi_districts = df.getDistrictList(year) districts = DistrictManipulator.createOrUpdate(fmsapi_districts) template_values = { "districts": districts, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_district_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) models = df.getEventTeams(event_key) teams = [] district_teams = [] robots = [] for group in models: # models is a list of tuples (team, districtTeam, robot) if isinstance(group[0], Team): teams.append(group[0]) if isinstance(group[1], DistrictTeam): district_teams.append(group[1]) if isinstance(group[2], Robot): robots.append(group[2]) # Write new models teams = TeamManipulator.createOrUpdate(teams) district_teams = DistrictTeamManipulator.createOrUpdate(district_teams) robots = RobotManipulator.createOrUpdate(robots) if not teams: # No teams found registered for this event teams = [] # Build EventTeams event_teams = [EventTeam( id=event.key_name + "_" + team.key_name, event=event.key, team=team.key, year=event.year) for team in teams] # Delete eventteams of teams that are no longer registered if event.future: existing_event_team_keys = set(EventTeam.query(EventTeam.event == event.key).fetch(1000, keys_only=True)) event_team_keys = set([et.key for et in event_teams]) et_keys_to_delete = existing_event_team_keys.difference(event_team_keys) EventTeamManipulator.delete_keys(et_keys_to_delete) event_teams = EventTeamManipulator.createOrUpdate(event_teams) if type(event_teams) is not list: event_teams = [event_teams] template_values = { 'event': event, 'event_teams': event_teams, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_details_get.html') self.response.out.write(template.render(path, template_values))
def test_2017flwp(self): event = Event(id='2017flwp', event_short='flwp', year=2017, event_type_enum=0, timezone_id='America/New_York') event.put() MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 21, 22)).getMatches('2017flwp')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017flwp'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 5) old_match = Match.get_by_id('2017flwp_sf1m3') self.assertNotEqual(old_match, None) self.assertEqual(old_match.alliances['red']['score'], 255) self.assertEqual(old_match.alliances['blue']['score'], 255) self.assertEqual(old_match.score_breakdown['red']['totalPoints'], 255) self.assertEqual(old_match.score_breakdown['blue']['totalPoints'], 255) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 21, 35)).getMatches('2017flwp')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017flwp'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 6) new_match = Match.get_by_id('2017flwp_sf1m3') self.assertNotEqual(new_match, None) self.assertEqual(old_match.alliances, new_match.alliances) self.assertEqual(old_match.score_breakdown, new_match.score_breakdown) tiebreaker_match = Match.get_by_id('2017flwp_sf1m4') self.assertNotEqual(tiebreaker_match, None) self.assertEqual(tiebreaker_match.alliances['red']['score'], 165) self.assertEqual(tiebreaker_match.alliances['blue']['score'], 263) self.assertEqual( tiebreaker_match.score_breakdown['red']['totalPoints'], 165) self.assertEqual( tiebreaker_match.score_breakdown['blue']['totalPoints'], 263)
def get(self, key_name): existing_team = Team.get_by_id(key_name) fms_df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() year = datetime.date.today().year fms_details = fms_df.getTeamDetails(year, key_name) if fms_details: team, district_team, robot = fms_details[0] else: team = None district_team = None robot = None if team: team = TeamManipulator.mergeModels(team, df2.getTeamDetails(existing_team)) else: team = df2.getTeamDetails(existing_team) if team: team = TeamManipulator.createOrUpdate(team) # Clean up junk district teams # https://www.facebook.com/groups/moardata/permalink/1310068625680096/ dt_keys = DistrictTeam.query( DistrictTeam.team == existing_team.key, DistrictTeam.year == year).fetch(keys_only=True) keys_to_delete = set() for dt_key in dt_keys: if not district_team or dt_key.id() != district_team.key.id(): keys_to_delete.add(dt_key) DistrictTeamManipulator.delete_keys(keys_to_delete) if district_team: district_team = DistrictTeamManipulator.createOrUpdate(district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': team is not None, 'district': district_team, 'robot': robot, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') fmsapi_districts = df.getDistrictList(year) districts = DistrictManipulator.createOrUpdate(fmsapi_districts) template_values = { "districts": districts, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/fms_district_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): # Combines data from three datafeeds with priorities: # 1) DatafeedFMSAPI (missing website) # 2) DatafeedUsfirst (missing rookie year) # 3) DatafeedUsfirstLegacy (has all info) legacy_df = DatafeedUsfirstLegacy() usfirst_df = DatafeedUsfirst() fms_df = DatafeedFMSAPI('v2.0') # Start with lowest priority legacy_team = legacy_df.getTeamDetails(Team.get_by_id(key_name)) usfirst_team = usfirst_df.getTeamDetails(Team.get_by_id(key_name)) fms_details = fms_df.getTeamDetails(date.today().year, key_name) if fms_details: fms_team, district_team, robot = fms_details else: fms_team = None district_team = None robot = None team = None if usfirst_team: team = TeamManipulator.updateMergeBase(usfirst_team, legacy_team) if fms_team: team = TeamManipulator.updateMergeBase(fms_team, team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate(district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) if team: team = TeamManipulator.createOrUpdate(team) success = True else: success = False logging.warning("getTeamDetails failed for team: {}".format(key_name)) template_values = { 'key_name': key_name, 'team': team, 'success': success, 'district': district_team, 'robot': robot, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, district_key): df = DatafeedFMSAPI('v2.0') district_with_rankings = df.getDistrictRankings(district_key) districts = [] if district_with_rankings: districts = DistrictManipulator.createOrUpdate(district_with_rankings) template_values = { "districts": [districts], } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_district_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') new_events = EventManipulator.createOrUpdate(df.getEventList(year)) # Fetch EventTeams for each event for event in new_events: taskqueue.add(queue_name='fms-api', url='/tasks/get/fmsapi_eventteams/' + event.key_name, method='GET') template_values = {"events": new_events} path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI() rankings = df.getEventRankings(event_key) event = Event.get_by_id(event_key) if rankings and event.rankings_json != json.dumps(rankings): event.rankings_json = json.dumps(rankings) event.dirty = True EventManipulator.createOrUpdate(event) template_values = {'rankings': rankings, 'event_name': event.key_name} path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_rankings_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') rankings = df.getEventRankings(event_key) event = Event.get_by_id(event_key) if rankings and event.rankings_json != json.dumps(rankings): event.rankings_json = json.dumps(rankings) event.dirty = True EventManipulator.createOrUpdate(event) template_values = {'rankings': rankings, 'event_name': event.key_name} path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_rankings_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') rankings = df.getEventRankings(event_key) event_details = EventDetails( id=event_key, rankings=rankings ) EventDetailsManipulator.createOrUpdate(event_details) template_values = {'rankings': rankings, 'event_name': event_details.key.id()} if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_rankings_get.html') self.response.out.write(template.render(path, template_values))
def get(self, district_key): df = DatafeedFMSAPI('v2.0') district_with_rankings = df.getDistrictRankings(district_key) districts = [] if district_with_rankings: districts = DistrictManipulator.createOrUpdate( district_with_rankings) template_values = { "districts": [districts], } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/fms_district_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): datafeed = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) awards = datafeed.getAwards(event) if event and event.remap_teams: EventHelper.remapteams_awards(awards, event.remap_teams) new_awards = AwardManipulator.createOrUpdate(awards) if new_awards is None: new_awards = [] elif type(new_awards) != list: new_awards = [new_awards] # create EventTeams team_ids = set() for award in new_awards: for team in award.team_list: team_ids.add(team.id()) teams = TeamManipulator.createOrUpdate([ Team(id=team_id, team_number=int(team_id[3:])) for team_id in team_ids ]) if teams: if type(teams) is not list: teams = [teams] event_teams = EventTeamManipulator.createOrUpdate([ EventTeam(id=event_key + "_" + team.key.id(), event=event.key, team=team.key, year=event.year) for team in teams ]) template_values = { 'awards': new_awards, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_awards_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') first_events, _ = df.getSyncEnabledOffseasonEvents(year) linked_events, maybed_linked_events, new_events = \ OffseasonEventHelper.categorize_offseasons(int(year), first_events) events_to_update = [] events_to_put = [] # for all events with a first_code linked, ensure official=True logging.info("Found {} already linked events".format( len(linked_events))) for tba, first in linked_events: if tba.first_code != first.event_short or not tba.official: tba.first_code = first.event_short tba.official = True events_to_put.append(tba) events_to_update.append(tba) # for all events that we can maybe link, also do that logging.info("Auto-linking {} probably events".format( len(maybed_linked_events))) for tba, first in maybed_linked_events: tba.first_code = first.event_short tba.official = True events_to_put.append(tba) events_to_update.append(tba) logging.info("Found {} events to put".format(len(events_to_put))) if events_to_put: EventManipulator.createOrUpdate(events_to_put) # Enqueue details updates for these events logging.info("Found {} events to update".format(len(events_to_update))) for event in events_to_update: taskqueue.add(queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/' + event.key_name, method='GET') # Event we don't have anything for... Create suggestions logging.info("Found {} new events to link".format(len(new_events))) SuggestionCreator.createDummyOffseasonSuggestions(new_events)
def get(self, key_name): existing_team = Team.get_by_id(key_name) fms_df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() fms_details = fms_df.getTeamDetails(datetime.date.today().year, key_name) if fms_details: team, district_team, robot = fms_details[0] else: team = None district_team = None robot = None if team: team = TeamManipulator.mergeModels( team, df2.getTeamDetails(existing_team)) else: team = df2.getTeamDetails(existing_team) if team: team = TeamManipulator.createOrUpdate(team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate( district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': team is not None, 'district': district_team, 'robot': robot, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') first_events, _ = df.getSyncEnabledOffseasonEvents(year) linked_events, maybed_linked_events, new_events = \ OffseasonEventHelper.categorize_offseasons(int(year), first_events) events_to_update = [] events_to_put = [] # for all events with a first_code linked, ensure official=True logging.info("Found {} already linked events".format(len(linked_events))) for tba, first in linked_events: if tba.first_code != first.event_short or not tba.official: tba.first_code = first.event_short tba.official = True events_to_put.append(tba) events_to_update.append(tba) # for all events that we can maybe link, also do that logging.info("Auto-linking {} probably events".format(len(maybed_linked_events))) for tba, first in maybed_linked_events: tba.first_code = first.event_short tba.official = True events_to_put.append(tba) events_to_update.append(tba) logging.info("Found {} events to put".format(len(events_to_put))) if events_to_put: EventManipulator.createOrUpdate(events_to_put) # Enqueue details updates for these events logging.info("Found {} events to update".format(len(events_to_update))) for event in events_to_update: taskqueue.add( queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/'+event.key_name, method='GET' ) # Event we don't have anything for... Create suggestions logging.info("Found {} new events to link".format(len(new_events))) SuggestionCreator.createDummyOffseasonSuggestions(new_events)
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) alliance_selections = df.getEventAlliances(event_key) if alliance_selections and event.alliance_selections != alliance_selections: event.alliance_selections_json = json.dumps(alliance_selections) event._alliance_selections = None event.dirty = True EventManipulator.createOrUpdate(event) template_values = {'alliance_selections': alliance_selections, 'event_name': event.key_name} if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) alliance_selections = df.getEventAlliances(event_key) event_details = EventDetails( id=event_key, alliance_selections=alliance_selections ) EventDetailsManipulator.createOrUpdate(event_details) template_values = {'alliance_selections': alliance_selections, 'event_name': event_details.key.id()} if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') new_events = EventManipulator.createOrUpdate(df.getEventList(year)) # Fetch EventTeams for each event for event in new_events: taskqueue.add( queue_name='fms-api', url='/tasks/get/fmsapi_eventteams/'+event.key_name, method='GET' ) template_values = { "events": new_events } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) alliance_selections = df.getEventAlliances(event_key) event_details = EventDetails( id=event_key, alliance_selections=alliance_selections ) EventDetailsManipulator.createOrUpdate(event_details) template_values = {'alliance_selections': alliance_selections, 'event_name': event_details.key.id()} if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): datafeed = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) awards = datafeed.getAwards(event) if event and event.remap_teams: EventHelper.remapteams_awards(awards, event.remap_teams) new_awards = AwardManipulator.createOrUpdate(awards) if new_awards is None: new_awards = [] elif type(new_awards) != list: new_awards = [new_awards] # create EventTeams team_ids = set() for award in new_awards: for team in award.team_list: team_ids.add(team.id()) teams = TeamManipulator.createOrUpdate([Team( id=team_id, team_number=int(team_id[3:])) for team_id in team_ids]) if teams: if type(teams) is not list: teams = [teams] event_teams = EventTeamManipulator.createOrUpdate([EventTeam( id=event_key + "_" + team.key.id(), event=event.key, team=team.key, year=event.year) for team in teams]) template_values = { 'awards': new_awards, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_awards_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0', save_response=True) updated_matches = [] for m1 in df.getMatches(event_key): m2 = m1.key.get() # Only update if teams and scores are equal if m2 and (m1.alliances['red']['teams'] == m2.alliances['red']['teams'] and m1.alliances['blue']['teams'] == m2.alliances['blue']['teams'] and m1.alliances['red']['score'] == m2.alliances['red']['score'] and m1.alliances['blue']['score'] == m2.alliances['blue']['score']): old_alliances = m2.alliances old_alliances['red']['dqs'] = m1.alliances['red']['dqs'] old_alliances['blue']['dqs'] = m1.alliances['blue']['dqs'] m2.alliances_json = json.dumps(old_alliances) updated_matches.append(m2) else: logging.warning("Match not equal: {}".format(m1.key.id())) MatchManipulator.createOrUpdate(updated_matches) self.response.out.write("DONE")
def get(self, key_name): fms_df = DatafeedFMSAPI('v2.0') year = datetime.date.today().year team = Team.get_by_id(key_name) avatar, keys_to_delete = fms_df.getTeamAvatar(year, key_name) if avatar: MediaManipulator.createOrUpdate(avatar) MediaManipulator.delete_keys(keys_to_delete) template_values = { 'key_name': key_name, 'team': team, 'success': avatar is not None, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_avatar_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() merged_events = EventManipulator.mergeModels(df.getEventList(year), df2.getEventList(year)) events = EventManipulator.createOrUpdate(merged_events) # Fetch event details for each event for event in events: taskqueue.add( queue_name='datafeed', url='/backend-tasks/get/event_details/'+event.key_name, method='GET' ) template_values = { "events": events } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) matches = MatchHelper.deleteInvalidMatches( df.getMatches(event_key), Event.get_by_id(event_key) ) if event and event.remap_teams: EventHelper.remapteams_matches(matches, event.remap_teams) new_matches = MatchManipulator.createOrUpdate(matches) template_values = { 'matches': new_matches, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_matches_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0', save_response=True) event = Event.get_by_id(event_key) matches = MatchHelper.deleteInvalidMatches(df.getMatches(event_key), Event.get_by_id(event_key)) if event and event.remap_teams: EventHelper.remapteams_matches(matches, event.remap_teams) new_matches = MatchManipulator.createOrUpdate(matches) template_values = { 'matches': new_matches, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_matches_get.html') self.response.out.write(template.render(path, template_values))
def get(self, year): df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() merged_events = EventManipulator.mergeModels(df.getEventList(year), df2.getEventList(year)) events = EventManipulator.createOrUpdate(merged_events) # Fetch event details for each event for event in events: taskqueue.add( queue_name='datafeed', target='backend-tasks', url='/backend-tasks/get/event_details/'+event.key_name, method='GET' ) template_values = { "events": events } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/fms_event_list_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): existing_team = Team.get_by_id(key_name) fms_df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() fms_details = fms_df.getTeamDetails(datetime.date.today().year, key_name) if fms_details: team, district_team, robot = fms_details[0] else: team = None district_team = None robot = None if team: team = TeamManipulator.mergeModels(team, df2.getTeamDetails(existing_team)) else: team = df2.getTeamDetails(existing_team) if team: team = TeamManipulator.createOrUpdate(team) if district_team: district_team = DistrictTeamManipulator.createOrUpdate(district_team) if robot: robot = RobotManipulator.createOrUpdate(robot) template_values = { 'key_name': key_name, 'team': team, 'success': team is not None, 'district': district_team, 'robot': robot, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) if event.event_type_enum == EventType.CMP_FINALS: logging.info("Skipping Einstein alliance selections") return alliance_selections = df.getEventAlliances(event_key) if alliance_selections and event.alliance_selections != alliance_selections: event.alliance_selections_json = json.dumps(alliance_selections) event._alliance_selections = None event.dirty = True EventManipulator.createOrUpdate(event) template_values = {'alliance_selections': alliance_selections, 'event_name': event.key_name} path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) alliance_selections = df.getEventAlliances(event_key) if alliance_selections and event.alliance_selections != alliance_selections: event.alliance_selections_json = json.dumps(alliance_selections) event._alliance_selections = None event.dirty = True EventManipulator.createOrUpdate(event) template_values = { 'alliance_selections': alliance_selections, 'event_name': event.key_name } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_alliances_get.html') self.response.out.write(template.render(path, template_values))
def get(self, key_name): fms_df = DatafeedFMSAPI('v2.0') year = datetime.date.today().year team = Team.get_by_id(key_name) avatar, keys_to_delete = fms_df.getTeamAvatar(year, key_name) if avatar: MediaManipulator.createOrUpdate(avatar) MediaManipulator.delete_keys(keys_to_delete) template_values = { 'key_name': key_name, 'team': team, 'success': avatar is not None, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_team_avatar_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): datafeed = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) new_awards = AwardManipulator.createOrUpdate(datafeed.getAwards(event)) if new_awards is None: new_awards = [] elif type(new_awards) != list: new_awards = [new_awards] # create EventTeams team_ids = set() for award in new_awards: for team in award.team_list: team_ids.add(team.id()) teams = TeamManipulator.createOrUpdate([ Team(id=team_id, team_number=int(team_id[3:])) for team_id in team_ids ]) if teams: if type(teams) is not list: teams = [teams] event_teams = EventTeamManipulator.createOrUpdate([ EventTeam(id=event_key + "_" + team.key.id(), event=event.key, team=team.key, year=event.year) for team in teams ]) template_values = { 'awards': new_awards, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_awards_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): datafeed = DatafeedFMSAPI('v2.0') event = Event.get_by_id(event_key) new_awards = AwardManipulator.createOrUpdate(datafeed.getAwards(event)) if new_awards is None: new_awards = [] elif type(new_awards) != list: new_awards = [new_awards] # create EventTeams team_ids = set() for award in new_awards: for team in award.team_list: team_ids.add(team.id()) teams = TeamManipulator.createOrUpdate([Team( id=team_id, team_number=int(team_id[3:])) for team_id in team_ids]) if teams: if type(teams) is not list: teams = [teams] event_teams = EventTeamManipulator.createOrUpdate([EventTeam( id=event_key + "_" + team.key.id(), event=event.key, team=team.key, year=event.year) for team in teams]) template_values = { 'awards': new_awards, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_awards_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() event = Event.get_by_id(event_key) # Update event fmsapi_events, fmsapi_districts = df.getEventDetails(event_key) elasticsearch_events = df2.getEventDetails(event) updated_event = EventManipulator.mergeModels(fmsapi_events, elasticsearch_events) if updated_event: event = EventManipulator.createOrUpdate(updated_event) DistrictManipulator.createOrUpdate(fmsapi_districts) models = df.getEventTeams(event_key) teams = [] district_teams = [] robots = [] for group in models: # models is a list of tuples (team, districtTeam, robot) if isinstance(group[0], Team): teams.append(group[0]) if isinstance(group[1], DistrictTeam): district_teams.append(group[1]) if isinstance(group[2], Robot): robots.append(group[2]) # Merge teams teams = TeamManipulator.mergeModels(teams, df2.getEventTeams(event)) # Write new models if teams and event.year == tba_config.MAX_YEAR: # Only update from latest year teams = TeamManipulator.createOrUpdate(teams) district_teams = DistrictTeamManipulator.createOrUpdate(district_teams) robots = RobotManipulator.createOrUpdate(robots) if not teams: # No teams found registered for this event teams = [] if type(teams) is not list: teams = [teams] # Build EventTeams cmp_hack_sitevar = Sitevar.get_or_insert('cmp_registration_hacks') events_without_eventteams = cmp_hack_sitevar.contents.get('skip_eventteams', []) \ if cmp_hack_sitevar else [] skip_eventteams = event_key in events_without_eventteams event_teams = [ EventTeam(id=event.key_name + "_" + team.key_name, event=event.key, team=team.key, year=event.year) for team in teams ] if not skip_eventteams else [] # Delete eventteams of teams that are no longer registered if event_teams and not skip_eventteams: existing_event_team_keys = set( EventTeam.query(EventTeam.event == event.key).fetch( 1000, keys_only=True)) event_team_keys = set([et.key for et in event_teams]) et_keys_to_delete = existing_event_team_keys.difference( event_team_keys) EventTeamManipulator.delete_keys(et_keys_to_delete) event_teams = EventTeamManipulator.createOrUpdate(event_teams) if type(event_teams) is not list: event_teams = [event_teams] if event.year in {2018, 2019, 2020}: avatars, keys_to_delete = df.getEventTeamAvatars(event.key_name) if avatars: MediaManipulator.createOrUpdate(avatars) MediaManipulator.delete_keys(keys_to_delete) template_values = { 'event': event, 'event_teams': event_teams, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join( os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_details_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedFMSAPI('v2.0') df2 = DatafeedFIRSTElasticSearch() event = Event.get_by_id(event_key) # Update event fmsapi_events, fmsapi_districts = df.getEventDetails(event_key) elasticsearch_events = df2.getEventDetails(event) updated_event = EventManipulator.mergeModels( fmsapi_events, elasticsearch_events) if updated_event: event = EventManipulator.createOrUpdate(updated_event) DistrictManipulator.createOrUpdate(fmsapi_districts) models = df.getEventTeams(event_key) teams = [] district_teams = [] robots = [] for group in models: # models is a list of tuples (team, districtTeam, robot) if isinstance(group[0], Team): teams.append(group[0]) if isinstance(group[1], DistrictTeam): district_teams.append(group[1]) if isinstance(group[2], Robot): robots.append(group[2]) # Merge teams teams = TeamManipulator.mergeModels(teams, df2.getEventTeams(event)) # Write new models if teams: teams = TeamManipulator.createOrUpdate(teams) district_teams = DistrictTeamManipulator.createOrUpdate(district_teams) robots = RobotManipulator.createOrUpdate(robots) if not teams: # No teams found registered for this event teams = [] if type(teams) is not list: teams = [teams] # Build EventTeams cmp_hack_sitevar = Sitevar.get_or_insert('cmp_registration_hacks') events_without_eventteams = cmp_hack_sitevar.contents.get('skip_eventteams', []) \ if cmp_hack_sitevar else [] skip_eventteams = event_key in events_without_eventteams event_teams = [EventTeam( id=event.key_name + "_" + team.key_name, event=event.key, team=team.key, year=event.year) for team in teams] if not skip_eventteams else [] # Delete eventteams of teams that are no longer registered if event_teams != [] or skip_eventteams: existing_event_team_keys = set(EventTeam.query(EventTeam.event == event.key).fetch(1000, keys_only=True)) event_team_keys = set([et.key for et in event_teams]) et_keys_to_delete = existing_event_team_keys.difference(event_team_keys) EventTeamManipulator.delete_keys(et_keys_to_delete) event_teams = EventTeamManipulator.createOrUpdate(event_teams) if type(event_teams) is not list: event_teams = [event_teams] template_values = { 'event': event, 'event_teams': event_teams, } if 'X-Appengine-Taskname' not in self.request.headers: # Only write out if not in taskqueue path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_details_get.html') self.response.out.write(template.render(path, template_values))
def test_2017flwp_sequence(self): event = Event(id='2017flwp', event_short='flwp', year=2017, event_type_enum=0, timezone_id='America/New_York') event.put() event_code = 'flwp' file_prefix = 'frc-api-response/v2.0/2017/schedule/{}/playoff/hybrid/'.format( event_code) context = ndb.get_context() result = context.urlfetch( 'https://www.googleapis.com/storage/v1/b/bucket/o?bucket=tbatv-prod-hrd.appspot.com&prefix={}' .format(file_prefix)).get_result() for item in json.loads(result.content)['items']: filename = item['name'] time_str = filename.replace(file_prefix, '').replace('.json', '').strip() file_time = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f") query_time = file_time + datetime.timedelta(seconds=30) MatchManipulator.createOrUpdate(DatafeedFMSAPI( 'v2.0', sim_time=query_time).getMatches('2017{}'.format(event_code)), run_post_update_hook=False) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017flwp'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 7) self.assertEqual( Match.get_by_id('2017flwp_sf1m1').alliances['red']['score'], 305) self.assertEqual( Match.get_by_id('2017flwp_sf1m1').alliances['blue']['score'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m1').score_breakdown['red'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017flwp_sf1m1').score_breakdown['blue'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m2').alliances['red']['score'], 165) self.assertEqual( Match.get_by_id('2017flwp_sf1m2').alliances['blue']['score'], 258) self.assertEqual( Match.get_by_id('2017flwp_sf1m2').score_breakdown['red'] ['totalPoints'], 165) self.assertEqual( Match.get_by_id('2017flwp_sf1m2').score_breakdown['blue'] ['totalPoints'], 258) self.assertEqual( Match.get_by_id('2017flwp_sf1m3').alliances['red']['score'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m3').alliances['blue']['score'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m3').score_breakdown['red'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m3').score_breakdown['blue'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m4').alliances['red']['score'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m4').alliances['blue']['score'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m4').score_breakdown['red'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m4').score_breakdown['blue'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017flwp_sf1m5').alliances['red']['score'], 165) self.assertEqual( Match.get_by_id('2017flwp_sf1m5').alliances['blue']['score'], 263) self.assertEqual( Match.get_by_id('2017flwp_sf1m5').score_breakdown['red'] ['totalPoints'], 165) self.assertEqual( Match.get_by_id('2017flwp_sf1m5').score_breakdown['blue'] ['totalPoints'], 263)
def test_2017scmb(self): event = Event(id='2017scmb', event_short='scmb', year=2017, event_type_enum=0, timezone_id='America/New_York') event.put() MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 19, 17)).getMatches('2017scmb')) MatchHelper.deleteInvalidMatches(event.matches) qf_matches = Match.query(Match.event == ndb.Key(Event, '2017scmb'), Match.comp_level == 'qf').fetch() self.assertEqual(len(qf_matches), 12) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['red']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['red'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['blue'] ['totalPoints'], 305) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 19, 50)).getMatches('2017scmb')) MatchHelper.deleteInvalidMatches(event.matches) qf_matches = Match.query(Match.event == ndb.Key(Event, '2017scmb'), Match.comp_level == 'qf').fetch() self.assertEqual(len(qf_matches), 12) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['red']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['red'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['blue'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['red']['score'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['red'] ['totalPoints'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['blue'] ['totalPoints'], 305) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 20, 12)).getMatches('2017scmb')) MatchHelper.deleteInvalidMatches(event.matches) qf_matches = Match.query(Match.event == ndb.Key(Event, '2017scmb'), Match.comp_level == 'qf').fetch() self.assertEqual(len(qf_matches), 12) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['red']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['red'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['blue'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['red']['score'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['red'] ['totalPoints'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['blue'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').alliances['red']['score'], 312) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').alliances['blue']['score'], 255) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').score_breakdown['red'] ['totalPoints'], 312) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').score_breakdown['blue'] ['totalPoints'], 255) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 04, 20, 48)).getMatches('2017scmb')) MatchHelper.deleteInvalidMatches(event.matches) qf_matches = Match.query(Match.event == ndb.Key(Event, '2017scmb'), Match.comp_level == 'qf').fetch() self.assertEqual(len(qf_matches), 13) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['red']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['red'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m1').score_breakdown['blue'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['red']['score'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['red'] ['totalPoints'], 213) self.assertEqual( Match.get_by_id('2017scmb_qf4m2').score_breakdown['blue'] ['totalPoints'], 305) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').alliances['red']['score'], 312) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').alliances['blue']['score'], 255) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').score_breakdown['red'] ['totalPoints'], 312) self.assertEqual( Match.get_by_id('2017scmb_qf4m3').score_breakdown['blue'] ['totalPoints'], 255) self.assertEqual( Match.get_by_id('2017scmb_qf4m4').alliances['red']['score'], 310) self.assertEqual( Match.get_by_id('2017scmb_qf4m4').alliances['blue']['score'], 306) self.assertEqual( Match.get_by_id('2017scmb_qf4m4').score_breakdown['red'] ['totalPoints'], 310) self.assertEqual( Match.get_by_id('2017scmb_qf4m4').score_breakdown['blue'] ['totalPoints'], 306)
def test_2017ncwin(self): event = Event(id='2017ncwin', event_short='ncwin', year=2017, event_type_enum=0, timezone_id='America/New_York') event.put() MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 05, 21, 2)).getMatches('2017ncwin')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017ncwin'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 6) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['red']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['blue']['score'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['red'] ['totalPoints'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['blue'] ['totalPoints'], 150) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 05, 21, 30)).getMatches('2017ncwin')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017ncwin'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 6) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['red']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['blue']['score'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['red'] ['totalPoints'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['blue'] ['totalPoints'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['red']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['blue']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['red'] ['totalPoints'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['blue'] ['totalPoints'], 205) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 05, 21, 35)).getMatches('2017ncwin')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017ncwin'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 6) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['red']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['blue']['score'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['red'] ['totalPoints'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['blue'] ['totalPoints'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['red']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['blue']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['red'] ['totalPoints'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['blue'] ['totalPoints'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').alliances['red']['score'], 145) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').alliances['blue']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').score_breakdown['red'] ['totalPoints'], 145) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').score_breakdown['blue'] ['totalPoints'], 265) ndb.get_context().clear_cache( ) # Prevent data from leaking between tests MatchManipulator.createOrUpdate( DatafeedFMSAPI('v2.0', sim_time=datetime.datetime( 2017, 3, 05, 21, 51)).getMatches('2017ncwin')) MatchHelper.deleteInvalidMatches(event.matches) sf_matches = Match.query(Match.event == ndb.Key(Event, '2017ncwin'), Match.comp_level == 'sf').fetch() self.assertEqual(len(sf_matches), 7) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['red']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').alliances['blue']['score'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['red'] ['totalPoints'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m1').score_breakdown['blue'] ['totalPoints'], 150) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['red']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').alliances['blue']['score'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['red'] ['totalPoints'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m2').score_breakdown['blue'] ['totalPoints'], 205) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').alliances['red']['score'], 145) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').alliances['blue']['score'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').score_breakdown['red'] ['totalPoints'], 145) self.assertEqual( Match.get_by_id('2017ncwin_sf2m3').score_breakdown['blue'] ['totalPoints'], 265) self.assertEqual( Match.get_by_id('2017ncwin_sf2m4').alliances['red']['score'], 180) self.assertEqual( Match.get_by_id('2017ncwin_sf2m4').alliances['blue']['score'], 305) self.assertEqual( Match.get_by_id('2017ncwin_sf2m4').score_breakdown['red'] ['totalPoints'], 180) self.assertEqual( Match.get_by_id('2017ncwin_sf2m4').score_breakdown['blue'] ['totalPoints'], 305)