def getEventInfo(self, event_key): """ Return an Event dict with basic information """ memcache_key = "api_event_info_%s" % event_key event_dict = memcache.get(memcache_key) if event_dict is None: event = Event.get_by_key_name(event_key) if event is not None: event_dict = dict() event_dict["key"] = event.key().name() event_dict["year"] = event.year event_dict["event_code"] = event.event_short event_dict["name"] = event.name event_dict["short_name"] = event.short_name event_dict["location"] = event.location event_dict["official"] = event.official event_dict["facebook_eid"] = event.facebook_eid if event.start_date: event_dict["start_date"] = event.start_date.isoformat() else: event_dict["start_date"] = None if event.end_date: event_dict["end_date"] = event.end_date.isoformat() else: event_dict["end_date"] = None event_dict["teams"] = [a.team.key().name() for a in event.teams] event_dict["matches"] = [a.key().name() for a in event.match_set] memcache.set(memcache_key, event_dict, 300) return event_dict
def getTeamWLT(self, team_key, event_key): """ Given a team_key, and an event_key, find the Win Loss Tie. """ event = Event.get_by_key_name(event_key) matches = event.match_set.filter("team_key_names =", team_key) return self.getTeamWLTFromMatches(team_key, matches)
def get(self, event_key): event = Event.get_by_key_name(event_key) template_values = { "event": event } path = os.path.join(os.path.dirname(__file__), '../../templates/admin/events/edit.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): event = Event.get_by_key_name(event_key) teams = set() # Add teams from Matches for m in event.match_set: for team in m.team_key_names: teams.add(team) # Add teams from existing EventTeams for a in event.teams: if a.team: teams.add("frc%s" % a.team.team_number) eventteams_count = 0 for team in teams: team_object = Team.get_or_insert( key_name = team, team_number = int(team[3:]), #"frc177"->"177" ) et = EventTeam.get_or_insert( key_name = event_key + "_" + team, event = event, team = team_object, year = event.year) # Update if needed reput = False if not et.team: reput = True et.team = team_object elif et.team.key().name != team_object.key().name: reput = True et.team = team_object if et.year != event.year: reput = True et.year = event.year if reput: logging.info("Had to re-put %s" % et.key().name) et.put() eventteams_count = eventteams_count + 1 template_values = { 'eventteams_count': eventteams_count, } path = os.path.join(os.path.dirname(__file__), '../templates/cron/eventteam_update.html') self.response.out.write(template.render(path, template_values))
def findOrSpawn(self, new_event): """" Check if an event currently exists in the database based on key_name. Doesn't put objects. If it does, update it and give it back. If it does not, give it back. """ query = Event.all() # First, look for a key_name collision. event = Event.get_by_key_name(new_event.get_key_name()) if event is not None: event = self.updateMerge(new_event, event) return event # Don't see it, give it back. return new_event
def get(self, event_key): memcache_key = "event_detail_%s" % event_key html = memcache.get(memcache_key) if html is None: event = Event.get_by_key_name(event_key) matches = MatchHelper.organizeMatches(event.match_set) teams = TeamHelper.sortTeams([a.team for a in event.teams]) template_values = { "event": event, "matches": matches, "teams": teams, } path = os.path.join(os.path.dirname(__file__), '../templates/events/details.html') html = template.render(path, template_values) memcache.set(memcache_key, html, 300) self.response.out.write(html)
def get(self, event_key): memcache_key = "event_rss_%s" % event_key html = memcache.get(memcache_key) if html is None: event = Event.get_by_key_name(event_key) matches = MatchHelper.organizeMatches(event.match_set) rss_items = [] # Loop through and generate RSS items for each match for match in matches['f'] + matches['sf'] + matches['qf'] + matches['ef'] + matches['qm']: match.unpack_json() new_item = PyRSS2Gen.RSSItem( title = str(match.verbose_name()), link = 'http://www.thebluealliance.com/match/' + match.get_key_name() + '', # List the red and blue alliance teams and their score # TODO: Make this generic in case there's ever not just red/blue -gregmarra 12 Mar 2011 # TODO: Make this output format something either very machine or very human readable. # Probably opt for human, since machines should be using the API. -gregmarra 12 Mar 2011 description = "Red Alliance: " + ' '.join(match.alliances["red"]["teams"]) + " " + "Score: " + str(match.alliances["red"]["score"]) + " " + "Blue Alliance: " + ' '.join(match.alliances["blue"]["teams"]) + " " + "Score: " + str(match.alliances["blue"]["score"]) ) rss_items.append(new_item) # Create final rss document rss = PyRSS2Gen.RSS2( title = event.name + "-- " + str(event.year), link = 'http://www.thebluealliance.com/event/' + str(event.get_key_name()) + '', description = "RSS feed for the " + event.name + " provided by The Blue Alliance." , lastBuildDate = datetime.datetime.now(), items = rss_items ) html = rss.to_xml() memcache.set(memcache_key, html, 300) self.response.out.write(html)
def get(self, event_key): df = DatafeedTbaVideos() event = Event.get_by_key_name(event_key) tbavideos = df.getEventVideosList(event) new_tbavideos = list() if len(tbavideos) < 1: logging.info("No tbavideos found for event " + event.key().name()) else: for tbavideo in tbavideos: new_tbavideo = TBAVideoUpdater.findOrSpawn(tbavideo) # findOrSpawn doesn't put() things. new_tbavideos.append(new_tbavideo) keys = db.put(new_tbavideos) # Doing a bulk put() is faster than individually. template_values = { 'tbavideos': new_tbavideos, } path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/tba_videos_get.html') self.response.out.write(template.render(path, template_values))
def get(self, event_key): df = DatafeedUsfirstMatches() event = Event.get_by_key_name(event_key) matches = df.getMatchResultsList(event) new_matches = list() if matches is None: logging.info("No matches found for event " + str(event.year) + " " + str(event.name)) else: for match in matches: new_match = MatchUpdater.findOrSpawn(match) # findOrSpawn doesn't put() things. new_matches.append(new_match) keys = db.put(new_matches) # Doing a bulk put() is faster than individually. 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 post(self, match_key): logging.info(self.request) alliances_json = self.request.get("alliances_json") alliances = simplejson.loads(alliances_json) team_key_names = list() for alliance in alliances: team_key_names.extend(alliances[alliance].get('teams', None)) match = Match( key_name = match_key, event = Event.get_by_key_name(self.request.get("event_key_name")), game = self.request.get("game"), set_number = int(self.request.get("set_number")), match_number = int(self.request.get("match_number")), comp_level = self.request.get("comp_level"), team_key_names = team_key_names, alliances_json = alliances_json, #no_auto_update = str(self.request.get("no_auto_update")).lower() == "true", #TODO ) match = MatchUpdater.createOrUpdate(match) self.redirect("/admin/match/" + match.get_key_name())