Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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))
Ejemplo n.º 5
0
    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())