コード例 #1
0
 def get(self, first_eid):
     df = DatafeedUsfirstEvents()
     
     event = df.getEvent(first_eid)
     event = EventUpdater.createOrUpdate(event)
     
     teams = df.getEventRegistration(first_eid)
     eventteams_count = 0
     for team_dict in teams:
         # This could be refactored to do a lot fewer DB requests by batching the Team and EventTeam gets.
         # -gregmarra 5 Dec 2010
         team = Team.get_by_key_name("frc" + str(team_dict["number"]))
         if team is None:
             team = Team(
                 team_number = int(team_dict["number"]),
                 first_tpid = int(team_dict["tpid"]),
                 key_name = "frc" + str(team_dict["number"])
             )
             team.put()
         
         et = EventTeam.get_or_insert(
             key_name = event.key().name() + "_" + team.key().name(),
             event = event,
             team = team)
         eventteams_count = eventteams_count + 1
     
     template_values = {
         'event': event,
         'eventteams_count': eventteams_count,
     }
     
     path = os.path.join(os.path.dirname(__file__), '../templates/datafeeds/usfirst_event_get.html')
     self.response.out.write(template.render(path, template_values))
コード例 #2
0
 def getTeamInfo(self, team_key):
     """
     Return a Team dict with basic information.
     """
     memcache_key = "api_team_info_%s" % team_key
     team_dict = memcache.get(memcache_key)
     if team_dict is None:
         team = Team.get_by_key_name(team_key)
         if Team is not None:
             team_dict = dict()
             team_dict["key"] = team.key().name()
             team_dict["team_number"] = team.team_number
             team_dict["name"] = team.name
             team_dict["nickname"] = team.nickname
             team_dict["website"] = team.website
             team_dict["event_keys"] = [a.event.key().name() for a in team.events]
             team_dict["location"] = team.address
             
             try:
                 team.do_split_address()
                 team_dict["location"] = team.split_address["full_address"]
                 team_dict["locality"] = team.split_address["locality"]
                 team_dict["region"] = team.split_address["region"]
                 team_dict["country"] = team.split_address["country"]
             except Exception, e:
                 logging.error("Failed to include Address for api_team_info_%s" % team_key)
             
             memcache.set(memcache_key, team_dict, 3600)
         else:
             return None
コード例 #3
0
 def addTeamDetails(self, team_dict, year):
     """
     Consume a Team dict, and return it with a year's Events filtered and Matches added
     """
     
     # TODO Matches should live under Events - gregmarra 1 feb 2011
     # TODO Filter Events by year - gregmarra 1 feb 2011
     
     memcache_key = "api_team_details_%s_%s" % (team_dict["key"], year)
     matches_list = memcache.get(memcache_key)
     if matches_list is None:
         matches = list()
         team = Team.get_by_key_name(team_dict["key"])
         for e in [a.event for a in team.events]:
             match_list = e.match_set.filter("team_key_names =", team.key().name()).fetch(500)
             matches.extend(match_list)
         matches_list = list()
         for match in matches:
             match_dict = dict()
             match_dict["key"] = match.key().name()
             match_dict["event"] = match.event.key().name()
             match_dict["comp_level"] = match.comp_level
             match_dict["set_number"] = match.set_number
             match_dict["match_number"] = match.match_number
             match_dict["team_keys"] = match.team_key_names
             match_dict["alliances"] = simplejson.loads(match.alliances_json)
             matches_list.append(match_dict)
         
         memcache.set(memcache_key, matches_list, 600)
     
     team_dict["matches"] = matches_list
     return team_dict
コード例 #4
0
 def get(self, team_number):
     
     team = Team.get_by_key_name("frc" + team_number)                
     
     template_values = { 
         'team' : team,
     }
     
     path = os.path.join(os.path.dirname(__file__), '../../templates/admin/teams/details.html')
     self.response.out.write(template.render(path, template_values))
コード例 #5
0
 def get(self):
     try:
         q = self.request.get("q")
         logging.info("search query: %s" % q)
         if q.isdigit():
             team_key_name = "frc%s" % q
             team = Team.get_by_key_name(team_key_name)
             if team:
                 self.redirect(team.details_url())
                 return None
     except Exception, e:
         logging.warning("warning: %s" % e)
コード例 #6
0
 def scrapeTpid(self, number, skip=0, year=2011):
   """
   Searches the FIRST list of all teams for the requested team's tpid, caching
   all it encounters in the datastore. This has the side effect of creating Team
   objects along the way.
   
   This code is taken directly from Pat Fairbank's frclinks source and modified
   slightly to fit in the TBA framework. He has given us permission to borrow
   his code directly.
   """
   teams_to_put = list()
   while 1:
     logging.info("Fetching 250 teams based on %s data, skipping %s" % (year, skip))
     # TODO: Make this robust to season changes. -gregmarra 9 Jan 2011
     teamList = urlfetch.fetch(
         'https://my.usfirst.org/myarea/index.lasso?page=searchresults&' +
         'programs=FRC&reports=teams&sort_teams=number&results_size=250&' +
         'omit_searchform=1&season_FRC=%s&skip_teams=%s' % (year, skip),
         deadline=10)
     teamResults = self.teamRe.findall(teamList.content)
     tpid = None
     
     for teamResult in teamResults:
       teamNumber = self.teamNumberRe.findall(teamResult)[0]
       teamTpid = self.tpidRe.findall(teamResult)[0]
       if teamNumber == number:
         tpid = teamTpid
       
       logging.info("Team %s TPID was %s in year %s." % (teamNumber, teamTpid, year))
       
       team = Team.get_by_key_name('frc' + str(teamNumber))
       new_team = Team(
         team_number = int(teamNumber),
         first_tpid = int(teamTpid),
         first_tpid_year = int(year),
         key_name = "frc" + str(teamNumber)
       )
       if team is None:
         teams_to_put.append(new_team)
       else:
         team = TeamUpdater.updateMerge(new_team, team)
         teams_to_put.append(team)
     
     skip = int(skip) + 250
     db.put(teams_to_put)
     teams_to_put = list()
     
     if tpid:
       return tpid
     
     if len(self.lastPageRe.findall(teamList.content)) == 0:
       return None
コード例 #7
0
 def get(self, key_name):
     df = DatafeedUsfirstTeams()
     
     old_team = Team.get_by_key_name(key_name)
     logging.info("Updating team %s" % key_name)
     new_team = df.getTeamDetails(old_team.team_number) #TODO old team can be null -gregmarra 21 mar 2011
     team = TeamUpdater.createOrUpdate(new_team)
     
     template_values = {
         'team': team,
     }
     
     path = os.path.join(os.path.dirname(__file__), '../templates/team.html')
     self.response.out.write(template.render(path, template_values))
コード例 #8
0
 def addTeamEvents(self, team_dict, year):
     """
     Consume a Team dict, and return it with a year's Events.
     """
     memcache_key = "api_team_events_%s_%s" % (team_dict["key"], year)
     event_list = memcache.get(memcache_key)
     
     if event_list is None:
         team = Team.get_by_key_name(team_dict["key"])
         event_list = [self.getEventInfo(e.key().name()) for e in [a.event for a in team.events if a.year == int(year)]]
         for event_dict in event_list:
             event_dict["team_wlt"] = EventHelper.getTeamWLT(team_dict["key"], event_dict["key"])
         memcache.set(memcache_key, event_list, 600)
     
     team_dict["events"] = event_list
     return team_dict
コード例 #9
0
 def get(self, team_number, year=None):
     if type(year) == str: 
         year = int(year)
         explicit_year = True
     else:
         year = datetime.datetime.now().year
         explicit_year = False
     
     memcache_key = "team_detail_%s_%s" % ("frc" + team_number, year)
     html = memcache.get(memcache_key)
     
     if html is None:
         team = Team.get_by_key_name("frc" + team_number)
         
         #todo better 404 handling
         if not team:
             self.redirect("/")
         
         events = [a.event for a in team.events if a.year == year]
         for event in events:
             if not event.start_date:
                 event.start_date = datetime.datetime(year, 12, 31) #unknown goes last
         events = sorted(events, key=lambda event: event.start_date)
         
         years = sorted(set([a.year for a in team.events if a.year != None]))
         
         participation = list()
         
         # Return an array of event names and a list of matches from that event that the
         # team was a participant in.
         year_wlt_list = list()
         for e in events:
             match_list = e.match_set.filter("team_key_names =", team.key().name())
             matches = MatchHelper.organizeMatches(match_list)
             wlt = EventHelper.getTeamWLTFromMatches(team.key().name(), match_list)
             year_wlt_list.append(wlt)
             if wlt["win"] + wlt["loss"] + wlt["tie"] == 0:
                 display_wlt = None
             else:
                 display_wlt = wlt
             participation.append({ 'event' : e,
                                    'matches' : matches,
                                    'wlt': display_wlt })
         
         team.do_split_address()
         
         year_wlt = {"win": 0, "loss": 0, "tie": 0}
         for wlt in year_wlt_list:
             year_wlt["win"] += wlt["win"]
             year_wlt["loss"] += wlt["loss"]
             year_wlt["tie"] += wlt["tie"]
         if year_wlt["win"] + year_wlt["loss"] + year_wlt["tie"] == 0:
             year_wlt = None
         
         template_values = { "explicit_year": explicit_year,
                             "team": team,
                             "participation": participation,
                             "year": year,
                             "years": years,
                             "year_wlt": year_wlt }
         
         path = os.path.join(os.path.dirname(__file__), '../templates/teams/details.html')
         html = template.render(path, template_values)
         memcache.set(memcache_key, html, 300)
     
     self.response.out.write(html)